파이썬에서 날짜 데이터 다루기

황태용·2021년 3월 20일
1
post-thumbnail

파이썬에서 시간 데이터를 다루는 법에 대한 포스팅입니다. 공부하는 것을 미루고 구글링에만 의존해 왔었는데 이번에 정리해보려고 합니다. 날짜 데이터를 다루는 패키지는 크게 datetime, dateutil 2가지가 존재합니다.

1. datetime

  • 패키지 불러오기
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초"))

> 20210320153731
  • 문자열datetime 클래스 객체로 만들 수도 있습니다.
dt.datetime.strptime("2021-03-20 15:20", "%Y-%m-%d %H:%M")

> datetime.datetime(2021, 3, 20, 15, 20)

2. dateutil

  • 위에서 설명한 datetime 패키지의 strptime 매서드를 사용할 때는 날짜 데이터 형식을 지켜줘야 합니다.
  • 앞으로 설명할 dateutil 패키지의 parse 함수를 쓰면 자동으로 형식을 찾아줍니다.
from dateutil.parser import parse

parse('2021-03-21')

> datetime.datetime(2021, 3, 21, 0, 0)

3. 날짜 연산

3.1 datetime, timedelta

  • datetime 클래스끼리 서로 연산을 할 수도 있습니다.
  • 연산의 결과는 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)

3.2 dateutil, relativedelta

  • 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)

0개의 댓글