[210727 TIL - (1)] Django
TIME-ZONE
장고 프로젝트 파일의 settings.py에는 시간대와 관련된 설정을 할 수 있는 대표적인 변수로서 TIME_ZONE과 USE_TZ가 존재한다.
# Internationalization
# https://docs.djangoproject.com/en/3.2/topics/i18n/
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'Asia/Seoul'
USE_I18N = True
USE_L10N = True
USE_TZ = True
- 프로젝트 파일의 settings.py에는 다음과 같은 변수들이 존재한다.
datetime 객체의 종류
Naive 객체
- tzinfo 속성이 설정되지 않은 datetime 객체
- TIME_ZONE 변수로 지정한 시간대 사용
Aware 객체
- tzinfo 속성이 설정된 datetime 객체
- 명확하게 기준이 되는 시간대를 tzinfo 속성으로 지정
USE_TZ 설정에 따른 차이
USE_TZ = False
- 장고는 내부적으로 Naive 객체를 사용한다.
- 즉 장고 개발시 Naive Datetime 객체를 사용해야한다.
- 기준 시간대 => TIME_ZONE
USE_TZ = True
- 장고는 내부적으로 Aware datetime 객체를 사용한다.
- 즉 장고 개발 시 Aware datetime 객체를 사용해야 한다.
- 기준 시간대를 명확히 지정해줘야 한다.
- 폼에 입력된 날짜 값은 Current time zone으로 해석한 뒤 Aware datetime 객체로 변환되고, 템플릿에 렌더링할 때는 Aware datetime 객체를 Current time zone으로 변환한다.
장고 프로젝트 파일의 settings.py에는 시간대와 관련된 설정을 할 수 있는 대표적인 변수로서 TIME_ZONE과 USE_TZ가 존재한다.
# Internationalization
# https://docs.djangoproject.com/en/3.2/topics/i18n/
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'Asia/Seoul'
USE_I18N = True
USE_L10N = True
USE_TZ = True
- TIME_ZONE 변수로 지정한 시간대 사용
- 명확하게 기준이 되는 시간대를 tzinfo 속성으로 지정
※ 만약 Naive datetime 객체를 사용하면 어떻게 될까?
- 하위호환성을 위해 Naive datetime 객체를 사용해도 문제가 없도록 설계가 되어 있다.
- 데이터베이스에 저장될 때 Naive datetime 객체를 Aware datetime 객체로 변환하고, 경고만 띄워준다. 하지만 그것도 DST 등으로 인한 문제가 발생할 여지는 있기 때문에, 항상 Aware datetime 객체를 사용하는 게 안전하다.
관련 라이브러리
from datetime import datetime, date, timedelta
from django.utils import timezone
import pytz
datetime.now() # Naive (TIME_ZONE)
datetime.now(pytz.UTC) # Aware (UTC)
timezone.now() # Aware (UTC)
timezone.localtime(datetime.now(pytz.UTC) # Aware (UTC) → Aware (TIME_ZONE)
timezone.localtime(timezone.now()) # Aware (UTC) → Aware (TIME_ZONE)
timezone.make_aware(datetime.now()) # Naive (TIME_ZONE) → Aware (TIME_ZONE)
<참고>
Author And Source
이 문제에 관하여([210727 TIL - (1)] Django), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@rimi0108/210727-TIL-1-Django저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)