오랜만에 미들웨어를 리팩토링하면서 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는 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이 안먹힐까봐 확인해봤는데 정상으로 작동하는걸 확인함!
도움이 됐습니다 감사합니다