-
반응형
파이썬에서 자주 사용하는 날짜 형식에 대한 내용은 이전 포스팅에서 다루었습니다.
datetime을 처음 접하시는 분이면 이전 포스팅을 먼저 참고해 주세요.
[IT 이야기 공간/프로그램 언어] - 파이썬(python) 현재 날짜 시간 형식 포맷 변환 UTC datetime strfprint strprint
이번 포스팅은 날짜 형식을 알고 있다는 전제하에 날짜 계산을 다루어 봅니다.
날짜는 datetime 클래스, 계산은 timedelta 클래스를 사용하여 예제를 다룹니다.
먼저 클래스를 import 합니다.
>>> from datetime import datetime, timedelta
▶ 날짜 비교해 보기
데이터 타입이 같아야 비교가 되겠지요?
두개의 일자를 생성합니다. 그리고 그냥 비교 연산자를 사용하면 숫자 비교처럼 사용 할 수 있습니다.
>>> now1 = datetime.now()
>>> now2 = datetime.now()
>>> now1
datetime.datetime(2020, 8, 2, 23, 30, 41, 268399)
>>> now2
datetime.datetime(2020, 8, 2, 23, 30, 51, 819013)
>>> now2 > now1
True
일자 계산을 하여 아래와 같이 비교 할 수도 있습니다.
아래 예제는 두 날짜를 뺄셈하여 2일 보다 큰지 비교하는 예제 입니다.
>>> d1 = datetime( 2020, 8, 2 )
>>> d2 = datetime( 2020, 7, 31 )
>>> d1 – d2 > timedelta( days = 2 )
False
>>> d1 – d2
datetime.timedelta(days=2)
>>> d1 – d2 > timedelta( days = 1 )
True
위의 예제에서 timedelta 를 사용하였고 또한 두 날짜를 뺄셈하니 결과 값을 timedelta 로 보여 줍니다.
timedelta는 두 시간의 연산 할 때 사용합니다.
아래와 같은 형식으로 사용됩니다.
datetime.timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
▶ 두 날짜 차이 계산하기
이번에는 시간까지 생성한 결과를 확인해 봅니다.
다음 예제를 확인 합니다.
>>> d1 = datetime( 2020, 8, 2, 15, 30 , 30 )
>>> d2 = datetime( 2020, 7, 30, 12, 23, 39)
>>> d1 - d2
datetime.timedelta(days=3, seconds=11211)
>>> d3 = datetime.now()
>>> d3 - d2
datetime.timedelta(days=3, seconds=41284, microseconds=545060)
위의 예제에서 보듯이 timedelta 값으로 반환을 해 줍니다.
days, seconds, miliseconds로 표현을 해 줍니다.
위의 예제에서 반환된 timedelta 에 접근하는 방법입니다.
>>> x = d3 - d2
>>> x.days
3
>>> x.seconds
41284
>>>
초로 표현되는 것이 아쉽지만 계산하면 됩니다. 시간, 분으로 표현을 해 주고 싶다면 초를 시간과 분으로 계산하여 바꾸어 주면 됩니다.
▶ 날짜를 기준으로 특정 시간 구하기
30일 전은 100% 환불, 20일 전은 80% 환불, 10일전은 50% 환불 3일전은 20% 환불, 1일전은 10% 환불 을 해 주어야 하는 프로그램일 개발 한다고 가정합니다.
환불을 해 주어야 할 경우 특정일을 기준으로 80% 환불을 받기 위해서는 최대 몇일까지 취소 요청을 해야 할까요? 라고 하고 일자를 구해 봅니다.
특정일은 2020.9.5일 이라고 가정합니다.
아래 계산을 해 보니 2020년 8월 16일 까지는 취소를 해여 80% 환불을 받을 수 있다는 것을 알 수 있습니다.
>>> datetime( 2020, 9, 5 ) – timedelta(days=20)
datetime.datetime(2020, 8, 16, 0, 0)
>>> datetime( 2020, 9, 5 ) + timedelta(days=-20)
datetime.datetime(2020, 8, 16, 0, 0)
>>>
위의 예제는 같은 결과를 얻었습니다. 두가지 방식으로 사용 될 수 있습니다.
현재로 부터 1일 15시간 이후의 시간을 구해 봅니다.
>>> datetime.now() + timedelta( days=1, hours=15)
datetime.datetime(2020, 8, 4, 15, 15, 32, 642547)
>>>
현재 시간으로 부터 2 주 후의 시간을 구해 봅니다.
>>> datetime.now() + timedelta( weeks=2 )
datetime.datetime(2020, 8, 17, 0, 16, 39, 528692)
>>>
timedelta의 인수로 days(일), hours(시), minutes(분), seconds(초), microseconds(마이크로 초), miliseconds(밀리 초), weeks(주 ) 을 사용 할 수 있습니다.
값으로는 양수, 음수 를 사용 할 수 있습니다.
▶ 요일 구하기
요일을 구하는 예제 입니다.
weekday() 에서 숫자 0을 출력했는데 0 ~6 까지의 숫자이며, 월 ~일요일을 의미합니다.
>>> x = datetime.now()
>>> x
datetime.datetime(2020, 8, 3, 0, 25, 18, 190425)
>>>
>>> x.weekday()
0
>>> x.strftime('%A')
'Monday’
반응형'IT 이야기 공간 > 프로그램 언어' 카테고리의 다른 글
파이썬(python) SSH client를 이용한 네트워크 장비, 리눅스 서버 통신 방법 - paramiko (0) 2020.08.06 파이썬(python) 티베로 DB 접속 방법 - ODBC (0) 2020.08.05 파이썬(python) 현재 날짜 시간 형식 포맷 변환 UTC datetime strfprint strprint (0) 2020.08.03 파이썬(python) 순환 로그 파일 저장 및 관리 logging (0) 2020.08.02 파이썬(python) 외부 파일을 통한 환경 설정관리 ConfigParser (0) 2020.07.31