Python 날짜 연산/변환 (datetime)

4 분 소요

Python에는 datetime 내장 모듈을 이용해 날짜 관련 기능을 사용할 수 있습니다.

날짜 객체 (now, datetime)

import datetime


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

date_1 = datetime.datetime(2022, 6, 21)
print(date_1)

date_2 = datetime.datetime(2021, 3, 11, 6, 42, 11)
print(date_2)


# 출력
2022-06-21 21:58:40.852324
2022-06-21 00:00:00
2021-03-11 06:42:11

now로 현재 시간을 출력할 수 있고, datetime에 직접 날짜 정보를 입력해서 생성할 수 있습니다.

날짜 계산 (timedelta)

import datetime


now = datetime.datetime.now()
print(now)
print(now - datetime.timedelta(days=7))
print(now + datetime.timedelta(weeks=2))

date_1 = datetime.datetime(2022, 6, 14) - datetime.datetime(2022, 6, 7)
print(type(date_1), date_1)


# 출력
2022-06-21 22:06:46.784931
2022-06-14 22:06:46.784931
2022-07-05 22:06:46.784931
<class 'datetime.timedelta'> 7 days, 0:00:00

datetime 객체에 timedelta를 이용해서 7일 전, 2주 후 등의 날짜 계산을 할 수 있습니다. 또 date_1과 같이 datetime 객체끼리 계산해서 시간 차를 timedelta 객체로 구할 수도 있습니다.

요일

import datetime


week_day = ['월', '화', '수', '목', '금', '토', '일']
now = datetime.datetime.now()

print(now, week_day[now.weekday()] + '요일')


# 출력
2022-06-21 22:18:23.340046 화요일

weekday 함수를 이용해서 요일을 계산할 수 있습니다. 요일 값은 0 ~ 6까지 월요일 ~ 일요일로 표현됩니다.

Format (strftime, strptime)

import datetime


now = datetime.datetime.now()
print(now.strftime('%Y-%m-%d'))

date_1_str = '2021-04-12 16:42:15'
date_1 = datetime.datetime.strptime(date_1_str, '%Y-%m-%d %H:%M:%S')
print(type(date_1), date_1)


# 출력
2022-06-21
<class 'datetime.datetime'> 2021-04-12 16:42:15

strftime을 이용해 datetime 객체를 문자열로 변환하거나 strptime을 이용해 문자열을 datetime 객체로 변환할 수 있습니다. 변환할 때 %Y, %m, %d 등의 포맷을 사용해야하는데 많이 사용되는 코드는 아래 표와 같습니다.

format code 의미 예시
%Y 연도 4자리 1999, 2021
%y 연도 2자리 99, 21
%m 월 2자리 01, 02
%-m 1, 2
%B 월 영문 이름 January, February
%d 일 2자리 01, 02
%-d 1, 2
%H 시(24시간) 2자리 01, 23
%-H 시(24시간) 1, 23
%I 시(12시간) 2자리 01, 12
%-I 시(12시간) 1, 12
%M 분 2자리 01, 59
%-M 1, 59
%S 초 2자리 01, 59
%-S 1, 59


timestamp

import datetime


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

date_2 = datetime.datetime.fromtimestamp(1649770583)
print(date_2)


# 출력
1655818685.626752
2022-04-12 22:36:23

timestamp는 날짜를 숫자로만 표현한 것으로, 여기서는 초로 환산한 결과입니다. 환산은 https://www.epochconverter.com/과 같은 웹사이트에서 변환해서 확인할 수 있습니다. timestamp를 사용하는 이유는 아래 timezone에서 추가로 설명하겠습니다.

timezone

시간은 국가 별로 차이가 있기 때문에 한국에서 22시여도 국가 별로 시간이 다 다릅니다.

그래서 UTC를 이용해서 표준 시간을 계산해야하며, 한국은 UTC+9(+9시간)을 사용합니다. 이렇게 나라 별로 시간을 잘못 저장하면 꼬이는 오류가 발생할 수 있고, 문자열로 저장하면 데이터 크기도 많이 커지기 때문에 날짜를 저장할 때는 timestamp로 저장 후 변환하는 방식을 많이 선호합니다.

import datetime
from datetime import timedelta, timezone

now = datetime.datetime.now()
print(now.astimezone(timezone.utc))

kst = timezone(timedelta(hours=9))
print(now.astimezone(kst))


# 출력
2022-06-21 13:55:18.579839+00:00
2022-06-21 22:55:18.579839+09:00

댓글남기기