TimeZone
이 UTC
UTC
는 협정 세계 시간으로 국제 표준 시간UTC
로 두면 데이터베이스 저장 시에도 UTC
시간으로 저장Tip! 데이터베이스가
UTC
기준으로만 저장되는 이유
- 주된 이유는 일광 절약 시간 (
DST
)
- 많은 국가에는 시계가 봄에 앞으로 이동하고 가을에 뒤로 이동하는 DST 시스템이 있음
- 현지 시간으로 작업하는 경우 전환이 발생할 때 1년에 두 번 오류가 발생할 수 있음
pytz
문서는 이러한 문제에 대해 더 자세히 설명함- 이 문제에 대한 해결책은 코드에서
UTC
를 사용하고 최종 사용자와 상호 작용할 때만 현지 시간을 사용하는 것
settings.py
에서 수정해야 함# settings.py
TIME_ZONE = 'Asia/Seoul'
USE_TZ = False
USE_TZ
을 False
로 변경하지 않으면 데이터베이스는 계속 UTC
를 사용USE_TZ = True
template
과 form
에만 적용되며 그 외는 여전히 UTC
사용USE_TZ = False
False
설정 시 한국 시간을 구하기 위해서는 Naive datetime 객체
인 datetime.datetime.now()
대신 Aware datetime 객체
인 django.utils
의 timezone
을 사용해야 함# Aware datetime 객체
import django.utils import timezone
now = timezone.now()
# Naive datetime 객체
import datetime
now = datetime.datetime.now()
tzinfo
) 속성를 포함하여 날짜와 시간을 가지는 datetime 객체tzinfo
는 UTC
, 시간대 이름 및 DST
오프셋에서 로컬 시간의 오프셋을 나타내는 방법을 담고 있음Aware datetime 객체
는 자신의 시각 정보를 다른 Aware datetime 객체
와 상대적인 값으로 조정할 수 있도록 시간대나 일광 절약 시간 정책 혹은 적용 가능한 알고리즘 정보를 담고 있음datetime.datetime(2019, 2, 15, 4, 58, 4, 114979, tzinfo=<UTC>)
datetime.datetime(2019, 2, 15, 4, 58, 4, 114979)