달나라 노트

Python datetime : timedelta(시간 또는 날짜의 차이) 본문

Python/Python datetime

Python datetime : timedelta(시간 또는 날짜의 차이)

CosmosProject 2020. 12. 23. 02:49
728x90
반응형

 

 

 

datetime class의 timedelta method는 특정한 시간의 양을 저장하며 이를 이용하여 어떤 시점으로부터 얼마만큼의 시간이 양이 차이났을 때 과연 어느 시점으로 변할지를 계산합니다.
아래 예시를 봅시다.

 

 

import datetime

d1 = datetime.date(year = 2020, month = 1, day = 1)
d2 = datetime.date(year = 2020, month = 1, day = 10)
d3 = d2 - d1
print(d3)

d4 = datetime.datetime(2020, 1, 1, 0, 10, 20)
d5 = datetime.datetime(2020, 1, 10, 10, 10, 20)
d6 = d5 - d4
print(d6)

print(type(d3))
print(type(d6))

- Result
9 days, 0:00:00
9 days, 10:00:00
<class 'datetime.timedelta'>
<class 'datetime.timedelta'>

위 코드는 특정 두 시점간의 차이를 계산하는 방법입니다.

d1, d2, d3처럼 datetime 모듈의 date class를 이용하여 날짜간의 차이를 구할 수 있으며
d4, d5, d6처럼 datetime 모듈의 datetime class를 이용하여 날짜+시간의 차이를 구할 수 있습니다.
또한 datetime class에서 시간 명시를 하지 않으면 00시 00분 00초로 자동 셋팅되므로 datetime class를 이용하여 날짜간의 차이를 구할 수도 있습니다.

 

 

 

 

 

import datetime

d1 = datetime.timedelta(weeks = 1, days = 2, hours = 1, minutes = 10, seconds = 20)
d2 = datetime.timedelta(days = 2, hours = 1, seconds = 20)
d3 = d1 - d2

print(d1)
print(d2)
print(d3)

print(d1.days)
print(d2.days)
print(d3.days)


- Result
9 days, 1:10:20
2 days, 1:00:20
7 days, 0:10:00

9
2
7

위 코드는 datetime module의 timedelta class를 사용한 예시입니다.

d1에는 1주, 2일, 1시간, 10분, 20초라는 시간의 양이 들어가있습니다.
이를 합쳐보면 9일 1시간 10분 20초겠죠.

d2에는 2일, 1시간, 20초라는 시간의 양을 가지고 있습니다.
따라서 2 days, 1:00:20이라는 내용이 출력됩니다.

또한 이 둘을 빼면 7일과 10분이라는 시간의 양이 나오게 됩니다.

 

그리고 timedelta class에선 days를 이용하여 day 정보를 뽑아낼 수 있습니다.

 

 

 

 

 

 

import datetime

d1 = datetime.timedelta(seconds = 1)
d2 = datetime.date(seconds = 2)
d3 = d1 - d2

print(d1)
print(d2)
print(d3)
print(abs(d3))

- Result
0:00:01
0:00:02
-1 day, 23:59:59
0:00:01

timedelta class를 이용해 d1에 1초를 부여하고 d2에는 2초를 부여하였습니다.
그리고 d1 - d2를 하여 과연 음수값은 어떻게되는지 보았습니다.

그 결과 -1 day, 23:59:59라는 결과가 나왔는데 이것은 1초 - 2초의 결과인 -1초를 00시를 기준으로 1초 전으로 되돌아갔다는 뜻으로 인식하게 됩니다.
따라서 전날(-1 dya)의 23시 59분 59초가 되게됩니다.

만약 음수 양수 상관없이 모두 양수로 출력하고 싶다면 abs 함수를 이용하면 됩니다.

 

 

 

 

 

 

 

import datetime

d1 = datetime.timedelta(weeks = 1, days = 2, hours = 1, minutes = 10, seconds = 20, microseconds = 123456)
d2 = datetime.date(days = 2, hours = 1, seconds = 20, microseconds = 111111)
d3 = d1 - d2

print(d1.total_seconds())
print(d2.total_seconds())
print(d3.total_seconds())

Result
781820.123456
176420.111111
605400.012345

total_seconds() method를 이용하면 timedelta class에 의해 주어진 시간의 양을 초 단위로 환산하여 출력할 수 있습니다.

 

 

 

 

 

 

728x90
반응형
Comments