[Django] DateTimeField와 TimeZone (부제: 왜 자꾸 UTC로 저장되는가)
오랜만에 미들웨어를 리팩토링하면서 DRF를 사용하고있는데,
DateTimeField에 현재시간을 넣을일이 생겼었다
그런데 아래에 것들을 사용해도 DB에 insert된 내용을 보면 모두 UTC로 저장이 되는데,
from datetime import datetime
from django.utils import timezone
datetime.now() # naive
timezone.now() # aware
분명 Django settings엔 TIME_ZONE = 'Asia/Seoul'
로 잘 잡혀있다
이상하게 또 Django에서는 한국시간으로 잘 가져온다.
Aware와 Naive
처음엔 Aware와 Naive의 차이인건가 싶었다.
여기서 Aware와 Naive는 datetime의 객체들을 말한다.
① Aware : 시간대정보(tzinfo)속성과 날짜,시간을 가지는 datetime 객체
② Naive : 날짜와 시각만을 가지는 객체 (TIME_ZONE)
그런데 어차피 장고에선 값이 같을수밖에 없는게 Aware든 Naive든
둘다 따로 시간대정보를 지정하지 않았으니 값이 똑같이 나오지않을까?
이건 내가 원하는 답이 아닌것같다.
갓 공식문서
공식문서에 내가 원하는 해답이 적혀있었다
When USE_TZ is False, this is the time zone in which Django will store all datetimes.
When USE_TZ is True, this is the default time zone that Django will use to display datetimes in templates and to interpret datetimes entered in forms.
대충 직역하면 USE_TZ가 False면 timezone은 모든 datetime들을 저장할때 사용하고
USE_TZ가 True면 템플릿에 datetime들을 표시하고 form에 입력한 날짜를 해석하는데에 사용된다고한다.
정리하면
USE_TZ = True
: template와 form에만 적용됨(그외는 UTC)USE_TZ = False
: 모든 경우 저장할때도 적용됨
USE_TZ를 False로 수정하니까 해결되었다!
혹시나 template와 form이 안먹힐까봐 확인해봤는데 정상으로 작동하는걸 확인함!
해결인증샷
Author And Source
이 문제에 관하여([Django] DateTimeField와 TimeZone (부제: 왜 자꾸 UTC로 저장되는가)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@rimi/Django-DateTimeField와-TimeZone저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)