Computer Language/Python

시간 함수 datetime

rajent 2020. 11. 29. 01:32
728x90

Python에서 시간관련해서 굉장히 많이 쓰이는 함수입니다.

보통 성능측정할때는 그냥 time()을 쓰기도 하는데 실제 user data나 날짜 비교 등 날짜관련 조작을 위해서는 datetime이 자주 사용됩니다.

개인적으로 자주쓰지만 햇갈리는것들을 정리해봅니다

1. 문자열을 datetime으로 변환

import datetime

str_date = "2020-11-29 13:54:22"
trans_date = datetime.datetime.strptime(str_date, '%Y-%m-%D %H:%M:%S')
type(trans_date)
print(trans_date)
<class 'datetime.datetime'>
2020-11-29 13:54:22

만약 시간:분 이런 문자열이라도 format만 맞춰주면 입력 가능합니다.

import datetime

str_date = "13:54"
trans_date = datetime.datetime.strptime(str_date, '%H:%M')
print(trans_date)

결과를 보면 시간, 분은 맞는다 다른값은 초기값으로 지정됩니다.

1900-01-01 13:54:00

2. 시간 비교 및 연산
datetime type 간의 연산 중 가장 많이 쓰이는게 차이값 구하기일 것입니다.
시작날짜와 종료날짜간의 차이를 구해서 결과를 day 혹은 시,분,초 이런식으로 얻고자 하는 경우가 많습니다.

이런 경우, 아래와 같이 계산하면 됩니다.

import datetime

start = '03:00'
end = '03:30'

stime = datetime.datetime.strptime(start, '%H:%M')
etime = datetime.datetime.strptime(end, '%H:%M')

if etime < stime: 
    etime = etime + datetime.timedelta(days=1)

print(stime)
print(etime)

interval = etime-stime

length=int(interval.seconds/60)
print(length)
1900-01-01 03:00:00
1900-01-01 03:30:00
30

interval에서 지원하는 attribute는 아래와 같습니다.

print(interval) 
print(interval.days) # 일별
print(interval.seconds) # 초
print(interval.seconds/60) # 분
print(interval.seconds/3600) # 시

3.# dateime 형에서 날짜 증감
datetime에서 날짜를 생성 후 하루 뒤, 두시간 뒤, 이렇게 조작하고 싶을때 사용합니다.

import datetime

str_date = '03:00'
date = datetime.datetime.strptime(str_date, '%H:%M')
print(date)
date = date + datetime.timedelta(days=1)
print(date)
1900-01-01 03:00:00
1900-01-02 03:00:00

datetime.timedelta() 함수에 key=value 형식으로 입력하는데 key 유형은 정해져 있습니다.
python document page 정의를 참고해서 사용하면 됩니다.

timedelta객체는 두 날짜나 시간의 차이인 기간을 나타냅니다.classdatetime.timedelta(days=0,seconds=0,microseconds=0,milliseconds=0,minutes=0,hours=0,weeks=0)

모든 인자는 선택적이며 기본값은0입니다. 인자는 정수나 부동 소수점 수일 수 있으며, 양수나 음수일 수 있습니다.

days,seconds및microseconds만 내부적으로 저장됩니다. 인자는 이 단위로 변환됩니다:

  • 밀리 초는 1000마이크로초로 변환됩니다.
  • 분은 60초로 변환됩니다.
  • 시간은 3600초로 변환됩니다.
  • 주는 7일로 변환됩니다.