>

장고에서 시간대가 어떻게 작동하는지 알아 내기 위해 고심하고 있습니다. 내 시스템에는 UTC+00 의 모든 날짜 시간이 있습니다.   UTC+02 와 함께  TIME_ZONE 설정

timezone.get_default_timezone()                                                                                                                                                                                                                                                                                                                   
<DstTzInfo 'Europe/Rome' RMT+0:50:00 STD>
timezone.get_current_timezone()                                                                                                                                                                                                                                                                                                                   
<DstTzInfo 'Europe/Rome' RMT+0:50:00 STD>

PostgreSQL 를 사용하고 있습니다  백엔드 데이터베이스로 사용하고 다음 설정을 사용하고 있습니다.

TIME_ZONE = 'Europe/Rome'
USE_TZ = True

PostgreSQL 의 말 :

... if you’re using PostgreSQL, you can switch between USE_TZ = False and USE_TZ = True freely. The database connection’s time zone will be set to TIME_ZONE or UTC respectively, so that Django obtains correct datetimes in all cases. You don’t need to perform any data conversions.

쉘에서 date_joined 를 얻으려고하면  사용자의 필드이며 UTC + 00이며 UTC + 02로 변환되지 않습니다 (TIME_ZONE을 사용한 이후 예상 한대로)

admin.date_joined                                                                                                                                                                                                                                                                                                                                 
datetime.datetime(2017, 7, 12, 15, 22, 58, tzinfo=<UTC>)
str(admin.date_joined)                                                                                                                                                                                                                                                                                                                            
'2017-07-12 15:22:58+00:00'

직렬화 된 객체 (DRF)에 동일한 잘못된 날짜 시간이 포함되어 있습니다 (UTC + 00).

"date_joined": "2017-07-12T15:22:58Z",

장고는 또한 최종 사용자의 activate () 메소드로 선호하는 TIME_ZONE을 설정할 수있는 가능성을 제공하지만 이것은 다릅니다. 데이터베이스에서 데이터를 검색 할 때 기본적으로 모든 날짜 시간은 상대 TIME_ZONE 설정으로 변환되어야합니까?

내가 무엇을 놓치고 있습니까? 내가 어디에서 잘못 되나요?

  • 답변 # 1

    datetimes 를 이해하는 것이 중요합니다  "렌더링"시에만 현재 시간대로 변환됩니다. 즉, 템플릿, 양식 또는 Django Rest Framework의 경우 직렬 변환기를 사용할 때

    파이썬 datetime 의 시간대  오브젝트는 데이터베이스 연결에 따라 다르며 일반적으로 UTC 입니다. . 그 이유 중 하나는 시간대가 주로 디스플레이 문제이므로 Python 객체의 시간대가 실제로 중요하지 않기 때문입니다. 더 중요한 이유는 시간대 변환이 잠재적으로 손실되기 때문에 (DST 주위에 많은 시간대가 모호하기 때문에) 마지막 단계까지 이러한 종류의 변환을 수행하고 싶지 않습니다.

관련 자료

  • 이전 android Retrofit POST not working - 안드로이드 개조 post가 작동하지 않습니다 - 안드로이드 개조
  • 다음 python - 장고 마이그레이션이 연결된 데이터베이스에 적용되지 않음