Pergunta

(Eu sou novo para Python e Google App Engine, por favor me perdoe se minhas perguntas parecer básico).

Estou tendo um tempo helluva tentando gerenciar vários fusos horários do usuário no meu aplicativo do Google App Engine.

Aqui estão as minhas restrições:

  1. Se o usuário digitar o tempo de uma entrada, será hora local (incluindo DST, quando for o caso).
  2. Se um usuário não insira o tempo, o sistema deve inseri-lo para eles em seu tempo local (incluindo DST, quando for o caso).
  3. Quando a data ea hora são exibidos para o usuário, ele deve estar em sua hora local (incluindo DST, quando apropriado)

Eu entendo que o tempo vai ser armazenado internamente como UTC com um tzinfo objeto e que o App Engine irá armazenar os Modelos com o tempo UTC.

Eu já pensei que tinha tudo isso funcionou, pedindo ao usuário especificar o seu fuso horário em suas preferências. Então, eu simplesmente carregar suas preferências e acrescentar que tzinfo a quaisquer objetos de data e hora em referência a esse usuário.

No entanto, o nosso tempo recente de Verão quebrou. Acontece que eu não tinha implementado corretamente o dst () em meus objetos tzinfo. Pelo que entendi, I deve determinar se DST é atualmente, e em caso afirmativo, devolver o deslocamento correto para o tzinfo.

O problema é, eu não tenho nenhuma idéia de como determinar se o horário de verão do fuso horário é atual ou não. Estou faltando alguma coisa óbvia?

Foi útil?

Solução

Se você puder, eu recomendo ter um olhar para o pacote python-dateutil, que tem tz objetos pré-construídos para todos os fusos horários, incluindo informações compensar DST. Eu não acho que há uma maneira de "apenas saber" se DST está ligado ou não, sem dados de apoio ... é da data conduzido para a maioria dos fusos horários (ou, pelo menos, fusos horários que DST apoio), e as datas variam de acordo com locais costume, política, e todo tipo de coisas.

http://labix.org/python-dateutil

Outras dicas

Eu vejo alguns problemas aqui.

Se o usuário entra no tempo, entra-lo em fuso horário local, mas como você sabe qual é? Europa / Vilnius ou Europa / Madrid? Ou talvez Austrália / Melbourne? Se você não sabe o fuso horário, a data / hora torna-se "ingênuo".

A única base de dados fuso horário que é considerado adequadas e precisas (considerando o estado de fluxo constante) é Olson fuso horário db, disponível para Python como pytz pacote. Ele permite a fácil conversão de datas / horas entre fusos horários: primeiro você tomar data / hora e fuso horário do usuário, data Localize / hora no fuso horário do usuário, em seguida, levá-la como UTC, pronto para salvar em seu banco de dados. Display é contrário:. Data get / hora a partir de banco de dados, se localizam em UTC, em seguida, exibir como fuso horário do usuário

E a última coisa: não existe tal coisa como transformação automática DST . No caso de datas ambíguas / vezes você tem que saber com antecedência em que fuso horário a hora é introduzida. Essa é a nossa realidade humana.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top