파이썬에서 시간 데이터를 다루는 법에 대한 포스팅입니다. 공부하는 것을 미루고 구글링에만 의존해 왔었는데 이번에 정리해보려고 합니다. 날짜 데이터를 다루는 패키지는 크게 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)