파이썬에서 시간 데이터를 다루는 법에 대한 포스팅입니다. 공부하는 것을 미루고 구글링에만 의존해 왔었는데 이번에 정리해보려고 합니다. 날짜 데이터를 다루는 패키지는 크게 datetime
, dateutil
2가지가 존재합니다.
import datetime dt
datetime
패키지에는 날짜와 시간을 같이 저장하는 datetime 클래스
가 존재합니다.datetime 클래스
에서는 현재 시각을 출력하는 now
라는 클래스 메서드가 존재합니다. x = dt.datetime.now()
x
> datetime.datetime(2021, 3, 20, 15, 34, 17, 700258)
now
함수는 현재 시각을 datetime 클래스
로 만들어서 7개의 속성을 가집니다.x.year, x.month, x.day, x.hour, x.minute, x.second, x.microsecond
> (2021, 3, 20, 15, 34, 17, 700258)
datetime 클래스
에서 그 외에도 많이 쓰이는 메서드는 3개정도 됩니다.weekday
요일 반환 (0: 월 ~ 6:일)date
날짜 반환time
시간 반환x.weekday()
> 5
x.date()
> datetime.date(2021, 3, 20)
x.time()
> datetime.time(15, 37, 31, 553569)
strftime
메서드도 많이 쓰입니다.%Y
: 앞의 빈자리를 0으로 채우는 4자리 연도%m
: 앞의 빈자리를 0으로 채우는 2자리 월%d
: 앞의 빈자리를 0으로 채우는 2자리 일%H
: 앞의 빈자리를 0으로 채우는 2자리 시간(24H)%M
: 앞의 빈자리를 0으로 채우는 2자리 분%s
: 앞의 빈자리를 0으로 채우는 2자리 초print(x.strftime("%Y년 %m월 %d일 %H시 %M분 %S초"))
> 2021년 03월 20일 15시 37분 31초
문자열
을 datetime
클래스 객체로 만들 수도 있습니다.dt.datetime.strptime("2021-03-20 15:20", "%Y-%m-%d %H:%M")
> datetime.datetime(2021, 3, 20, 15, 20)
datetime
패키지의 strptime
매서드를 사용할 때는 날짜 데이터 형식을 지켜줘야 합니다.dateutil
패키지의 parse
함수를 쓰면 자동으로 형식을 찾아줍니다.from dateutil.parser import parse
parse('2021-03-21')
> datetime.datetime(2021, 3, 21, 0, 0)
timedelta
클래스 객체로 반환됩니다.import datetime as dt
dt1 = dt.datetime(2021, 3, 15, 12)
dt2 = dt.datetime(2021, 3, 1, 13)
time_diff = dt1 - dt2
time_diff
> datetime.timedelta(days=13, seconds=82800)
timedelta
클래스는 다음과 같은 속성을 가집니다.days
: 일수seconds
: 초microseconds
: 마이크로초time_diff.days, time_diff.seconds, time_diff.microseconds
> (13, 82800, 0)
datetime
클래스 객체에 timedelta
클래스 객체를 더해 새로운 날짜의 datetime
클래스 객체를 만들 수도 있습니다.import datetime as dt
t0 = dt.datetime(2021, 3, 1)
d = dt.timedelta(days=90)
t0 + d
> datetime.datetime(2021, 5, 30, 0, 0)
timedelta
클래스 객체의 속성은 days
, seconds
, microseconds
3가지 밖에 존재하지 않기 때문에 월 단위의 불가능 합니다.dateutil
패키지의 relativedelta
클래스는 월 단위의 연산을 지원합니다.datetime
의 10달 후의 날짜를 구해봅시다.import datetime as dt
from dateutil.relativedelta import relativedelta
t0 = dt.datetime(2021, 3, 1)
t0 + relativedelta(months=2)
> datetime.datetime(2021, 5, 1, 0, 0)