2017-12-29 67 views
2

나는 최종 사용자가 주어진 날에 오전 12 시부 터 오전 12 시까 지에 민감한 정보를 검색 할 수 있도록 장고에 응용 프로그램을 구축하고 있습니다. 자정부터 30 분 단위로 초를 나타내는 정수로이 정보를 데이터베이스에 저장합니다. 나는 장고의 시간대 문서를보고 있었다 : https://docs.djangoproject.com/en/2.0/topics/i18n/timezones/ 그리고 장고가 자동적으로 최종 사용자의 시간을 사용하는지, 아니면이 정보를 수집해야하고 내 견해에서 설명해야하는지 혼란 스러웠다.Django는 자동으로 최종 사용자의 시간대를 감지합니까?

정보가 도움이 될 것입니다. 감사.

답변

0

장고는 최종 사용자의 시간대를 감지하지 못합니다. 그러나 그것이하는 일은 꽤 똑똑합니다.

이를 생각해 보면 알 수 있듯이

Client    | Server    | UTC 
time  9:00 am | time  12:00 pm | time 7:00 am 
timezone UTC+2:00 | timezone UTC+5:00 | 

, 서버와 클라이언트는 서로 다른 시간대에 따라서 다른 지역의 시간을 가지고있다.

이제 클라이언트가 데이터베이스에 새 개체를 만들도록 요청했다고 가정 해 보겠습니다. 이 개체에는 날짜 필드가 있습니다. 그래서 장고는 오브젝트의 날짜를 UTC로 저장합니다.

어떻게 작동합니까?

장고는 서버의 현지 시간으로, 즉 12:00입니다. 그러면 오전 7 시가되는 5 시간을 뺀 UTC 시간으로 변환합니다. 그리고 이것이 장고가 객체를 저장하는 데 사용할 시간입니다.


자, 나중에 클라이언트가 언제 그 객체를 생성했는지보고 싶다고합시다.

개체 생성 시간은 7:00 am UTC입니다. 클라이언트에게 객체 생성 시간을 표시하려면 Jason이 링크 한 앱을 다른 대답으로 사용하십시오. 그러나 나는 사용자가 프록시를 사용할 수 있기 때문에 매우 안정적인 IP를 사용하여 시간대 조회를 찾지 못했습니다.

또는 시간을 UTC로 렌더링하고 JavaScript를 사용하여 클라이언트의 현지 시간으로 변환 할 수 있습니다. JS는 브라우저에서 실행되기 때문에 컴퓨터에서 클라이언트의 시간대를 정확하게 선택합니다.

마지막으로 7:00 am UTC을 클라이언트의 시간대로 변환 할 때 (UTC보다 2 시간 앞서서) 2 시간을 추가하면 클라이언트에서 개체 생성 시간이 예상 한대로 9:00 am으로 표시됩니다.

지구 반대편에 다른 클라이언트가 UTC-5:00 시간대에있는 경우에만 2:00 am을 부여하는 5 시간을 빼서 개체 시간을 표시 할 수 있습니다. 그래서 그 사용자에 따르면, 그것은 오전 2시에 추가되었습니다.

+0

허, 나는 이것을 몰랐다. 프로젝트의 일부 섹션에서는 Javascript 메서드를 사용하고 있으며 잘 수행 중입니다. 내가 작업하고있는 부분에 대해 사용자는 오전 10 시부 터 오후 2 시까 지 무언가를 볼 필요가 있으며 그 시간에만 반복적으로 반복해야합니다. 장고가 네이티브를 본질적으로 이해해야한다고 생각합니다. 그렇지 않다면, 나는 나의 요청으로 현지 UTC 시간을 보내고 그 정보를 바탕으로 그 정보를 사용자에게 제공 할 것이다. –

+0

@MaxMiller 시간대 지원을 활성화하려면 ['USE_TZ = True'] (https://docs.djangoproject.com/en/2.0/ref/settings/#std:setting-USE_TZ)를 설정해야합니다. – xyres