문제

(저는 Python 및 Google App Engine을 처음 사용합니다. 질문이 기본적으로 보이면 용서 해주세요).

Google App Engine 애플리케이션에서 여러 사용자 시간을 관리하려고 노력하고 있습니다.

내 제약은 다음과 같습니다.

  1. 사용자가 입력 시간을 입력하면 현지 시간 (적절한 경우 DST 포함)이됩니다.
  2. 사용자가 시간을 입력하지 않으면 시스템은 현지 시간 (적절한 경우 DST 포함)에 시스템을 입력해야합니다.
  3. 날짜와 시간이 사용자에게 표시되면 현지 시간 (적절한 경우 DST 포함)이어야합니다.

시간은 내부적으로 Tzinfo 객체가있는 UTC로 저장 될 것이며 App Engine은 모델을 UTC 시간으로 저장할 것임을 이해합니다.

나는 이전에 사용자에게 자신의 선호도에 시간대를 지정하도록 요청 함으로써이 모든 작업을 수행했다고 생각했습니다. 그런 다음 간단히 선호도를로드하고 해당 사용자와 관련하여 Tzinfo를 모든 DateTime 객체에 추가합니다.

그러나 우리의 최근 일광 절약 시간은 그것을 깨뜨 렸습니다. tzinfo 객체에서 dst ()를 올바르게 구현하지 않은 것으로 나타났습니다. 이해할 수 있듯이 DST가 현재 켜져 있는지 확인하고 그렇다면 Tzinfo의 올바른 오프셋을 반환해야합니다.

문제는 타임 존의 일광 시간이 최신인지 아닌지를 결정하는 방법을 모른다는 것입니다. 내가 분명한 것을 놓치고 있습니까?

도움이 되었습니까?

해결책

가능하다면, 나는 python-dateutil DST 오프셋 정보를 포함하여 모든 타임 존에 대해 TZ 객체가 사전 제작 된 패키지. DST가 데이터를 지원하지 않는지 여부를 "아는"방법이 없다고 생각합니다. 대부분의 시간대 (또는 적어도 DST를 지원하는 시간대)의 날짜는 로컬에 따라 다릅니다. 관습, 정치 및 모든 방식.

http://labix.org/python-dateutil

다른 팁

여기에 몇 가지 문제가 있습니다.

사용자가 시간을 입력하면 로컬 타임 존에 들어가지만 어느 쪽인지 어떻게 알 수 있습니까? 유럽/빌니우스 또는 유럽/마드리드? 아니면 호주/멜버른? 시간대를 모르는 경우 날짜/시간이 "순진한"이됩니다.

고려되는 유일한 시간대 데이터베이스 적절하고 정확합니다 (일정한 플럭스의 상태를 고려)는 Olson Timezone DB이며, Python에서 사용할 수 있습니다. pytz 패키지. 시간대 사이에 날짜/시간을 쉽게 변환 할 수 있습니다. 먼저 사용자로부터 날짜/시간 및 시간대를 가져 가면 사용자의 시간대 날짜/시간을 현지화 한 다음 UTC로 가져 가서 데이터베이스에 저장할 수 있습니다. 디스플레이는 다른 방법입니다 : 데이터베이스에서 날짜/시간 가져 오기, UTC에 로컬라이드 한 다음 사용자 시간대로 표시됩니다.

그리고 마지막 것 : 그런 것은 없습니다. 자동 DST 변환. 모호한 날짜/시간의 경우 시간이 입력되는 시간을 미리 알아야합니다. 그것이 우리의 인간 현실입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top