본문으로 바로가기

파이썬 날짜, 시간 다루기

category Language/Python 2020. 6. 18. 17:44

datetime 모듈

datatime 모듈은 날짜와 시간을 조작하는 클래스를 제공합니다.

날짜와 시간을 함께 저장하는 datetime 클래스, 날짜만 저장하는 date 클래스, 시간만 저장하는 time 클래스, 시간 구간 정보를 저장하는 timedelta 클래스 등을 제공합니다.

 

시간 객체 생성

date 객체와 time 객체를 합칠 때는 combine을 사용합니다.

import datetime

now = datetime.datetime.now()
print(type(now), now)

timestamp = now.timestamp()
print(type(timestamp), timestamp)
dt_obj = datetime.datetime.fromtimestamp(timestamp)
print(type(dt_obj), dt_obj)

date_obj = now.date()
print(type(date_obj), date_obj)
time_obj = now.time()
print(type(time_obj), time_obj)

dt_obj = datetime.datetime.combine(date_obj, time_obj)
print(type(dt_obj), dt_obj)
더보기
<class 'datetime.datetime'> 2020-06-18 16:44:43.684079
<class 'float'> 1592466283.684079
<class 'datetime.datetime'> 2020-06-18 16:44:43.684079
<class 'datetime.date'> 2020-06-18
<class 'datetime.time'> 16:44:43.684079
<class 'datetime.datetime'> 2020-06-18 16:44:43.684079

 

타입 변환

객체에서 문자열로 strftime, 문자열에서 객체로는 strptime 를 사용합니다.

문자열에서 객체 변환 시, 문자열의 포맷을 맞추어야 합니다.

now_str = str(now)
print(type(now_str), now_str)

df = '%Y-%m-%d %H:%M:%S'
dt_str = now.strftime(df)
print(type(dt_str), dt_str)

df2 = '%y%m%d %p %I:%M:%S'
dt_str2 = now.strftime(df2)
print(type(dt_str2), dt_str2)

dt_obj = datetime.datetime.strptime(dt_str, df)
print(type(dt_obj), dt_obj)

dt_obj2 = datetime.datetime.strptime(dt_str2, df2)
print(type(dt_obj2), dt_obj2)
더보기
<class 'str'> 2020-06-18 17:06:07.614215
<class 'str'> 2020-06-18 17:06:07
<class 'str'> 200618 PM 05:06:07
<class 'datetime.datetime'> 2020-06-18 17:06:07
<class 'datetime.datetime'> 2020-06-18 17:06:07

문자열에서 객체 변환 시, 문자열의 포맷이 다를 경우 다음과 같은 에러 발생.

df = '%Y-%m-%d %H:%M:%S'
df2 = '%y%m%d %p %I:%M:%S'
dt_str = now.strftime(df2)

dt_obj = datetime.datetime.strptime(dt_str, df) 
print(type(dt_obj), dt_obj)
더보기
ValueError: time data '200618 PM 05:15:14' does not match format '%Y-%m-%d %H:%M:%S'

 

시간 연산

timedelta 클래스는 시간 차이를 나타내며 연산 후, 사용할 수 있는 속성으로는 days, seconds, microseconds 가 있습니다.

dt_obj = now

td_obj = datetime.timedelta(days=1)
print(type(td_obj), td_obj)

yesterday_dt = dt_obj - td_obj
print(type(yesterday_dt), yesterday_dt)

tomorrow_dt = dt_obj + td_obj
print(type(tomorrow_dt), tomorrow_dt)

td_obj = dt_obj - yesterday_dt
print(type(dt_obj), dt_obj , type(yesterday_dt), yesterday_dt)
print(type(td_obj), td_obj)
print(type(td_obj.days), td_obj.days)
print(type(td_obj.seconds), td_obj.seconds)
print(type(td_obj.microseconds), td_obj.microseconds)
더보기
<class 'datetime.timedelta'> 1 day, 0:00:00
<class 'datetime.datetime'> 2020-06-17 17:36:02.560973
<class 'datetime.datetime'> 2020-06-19 17:36:02.560973
<class 'datetime.datetime'> 2020-06-18 17:36:02.560973 <class 'datetime.datetime'> 2020-06-17 17:36:02.560973
<class 'datetime.timedelta'> 1 day, 0:00:00
<class 'int'> 1
<class 'int'> 0
<class 'int'> 0

 

replace()

microsecond 를 제외하고 싶을 경우, replace 를 사용합니다.

now = datetime.datetime.now()
print(now)

now2 = now.replace(microsecond=0)
print(now2)
더보기
2020-06-18 17:41:57.763686
2020-06-18 17:41:57