[Django] DateTimeField

GreenBean·2022년 3월 30일
0
post-thumbnail

DateTimeField

DateTimeField와 TimeZone: UTC 변환

  • Django에서는 기본 TimeZoneUTC
    • UTC는 협정 세계 시간으로 국제 표준 시간
    • 국제 표준 시간으로 한국 시간을 보면 시차는 +9시간
  • 기본 세팅인 UTC로 두면 데이터베이스 저장 시에도 UTC 시간으로 저장

Tip! 데이터베이스가 UTC 기준으로만 저장되는 이유

  • 주된 이유는 일광 절약 시간 (DST)
    • 많은 국가에는 시계가 봄에 앞으로 이동하고 가을에 뒤로 이동하는 DST 시스템이 있음
    • 현지 시간으로 작업하는 경우 전환이 발생할 때 1년에 두 번 오류가 발생할 수 있음
      • pytz 문서는 이러한 문제에 대해 더 자세히 설명함
    • 이 문제에 대한 해결책은 코드에서 UTC를 사용하고 최종 사용자와 상호 작용할 때만 현지 시간을 사용하는 것
  • 시간 설정은 프로젝트 안의 settings.py 에서 수정해야 함
# settings.py
TIME_ZONE = 'Asia/Seoul'
USE_TZ = False
  • 이때 USE_TZFalse로 변경하지 않으면 데이터베이스는 계속 UTC 를 사용
    • USE_TZ = True
      • templateform에만 적용되며 그 외는 여전히 UTC 사용
    • USE_TZ = False
      • 저장할 때를 포함하여 모든 경우 적용됨
      • 다만 False 설정 시 한국 시간을 구하기 위해서는 Naive datetime 객체datetime.datetime.now() 대신 Aware datetime 객체django.utilstimezone을 사용해야 함

datetime 객체 종류

# Aware datetime 객체
import django.utils import timezone
now = timezone.now()

# Naive datetime 객체
import datetime
now = datetime.datetime.now()

Aware datetime 객체

  • 시간대 정보 (tzinfo) 속성를 포함하여 날짜와 시간을 가지는 datetime 객체
    • tzinfoUTC, 시간대 이름 및 DST 오프셋에서 로컬 시간의 오프셋을 나타내는 방법을 담고 있음
  • Aware datetime 객체는 자신의 시각 정보를 다른 Aware datetime 객체와 상대적인 값으로 조정할 수 있도록 시간대나 일광 절약 시간 정책 혹은 적용 가능한 알고리즘 정보를 담고 있음
  • 예시: datetime.datetime(2019, 2, 15, 4, 58, 4, 114979, tzinfo=<UTC>)

Naive datetime 객체

  • 날짜와 시간만을 가지는 datetime 객체
  • 그 자체만으로 시간대를 찾을 수 있는 충분한 정보를 포함하지 않음
  • 예시: datetime.datetime(2019, 2, 15, 4, 58, 4, 114979)
profile
🌱 Backend-Dev | hwaya2828@gmail.com

0개의 댓글