페이지

2016년 6월 22일 수요일

python django datetime timezone naive aware 정리

Python 3.5.1
Django 1.9.5
>>> from datetime import datetime
>>> # 현재시간을 확인해보겠습니다.
>>> now_naive = datetime.now()
>>> str(now_naive)
'2016-06-22 15:59:26.918742'
>>> # UTC 시간을 확인해보겠습니다.
>>> utcnow_naive = datetime.utcnow()
>>> str(utcnow_naive)
'2016-06-22 06:59:53.294294'
>>> # 두문자열을 보면 어떤게 어느지역 시간인지 분간할 수 없습니다.(naive datetime)

>>> # django 에서 제공하는 현재시간입니다.
>>> from django.utils import timezone
>>> timezone_now = timezone.now()
>>> str(timezone_now)
'2016-06-22 07:05:22.279485+00:00'
>>> # 위 문자열들과 비교해보면 뒤에 +00:00 이 붙어서 UTC 시간임을 알수 있습니다.(aware datetime)

>>> # naive 시간들을 aware 로 변경해보겠습니다.
>>> now_aware_utc = timezone.make_aware(now_naive,timezone.utc)
>>> now_aware_localtime = timezone.make_aware(now_naive,timezone.get_current_timezone())
>>> str(now_aware_utc)
'2016-06-22 15:59:26.918742+00:00'
>>> str(now_aware_localtime)
'2016-06-22 15:59:26.918742+09:00'
>>> # 앞의 시간값은 같은데 뒤의 timezone 정보만 다릅니다. utc로 지정하면 +00:00 이 붙고, current_timezone 으로 지정하면 +09:00 이 붙습니다. 즉 timezone 정보가 추가됩니다.
>>> # 따라서 naive 상태의 시간이 utc인지 current_timezone인지 명확히 알고 변경해야 합니다.
>>> # datetime.now() 는 current_timezone 이므로 now_aware_localtime 이 정확한 변환값입니다.

>>> # datetime.utcnow() 는 UTC 이므로 UTC를 지정하여 변환해줘야합니다.
>>> utcnow_aware_utc = timezone.make_aware(utcnow_naive,timezone.utc)
>>> str(utcnow_aware_utc)
'2016-06-22 06:59:53.294294+00:00'


>>> # 어떤것들은 +00:00 이 붙어서 출력되므로 일괄적으로 +09:00 이 붙은상태의 localtime으로 출력해보겠습니다.
>>> str(timezone.localtime(utcnow_aware_utc))
'2016-06-22 15:59:53.294294+09:00'
>>> str(timezone.localtime(now_aware_localtime))
'2016-06-22 15:59:26.918742+09:00'
>>> str(timezone.localtime(timezone_now))
'2016-06-22 16:05:22.279485+09:00'

참고문서

https://docs.djangoproject.com/en/1.9/topics/i18n/timezones/

댓글 없음:

댓글 쓰기