Pytz: Por que a normalização é necessária ao converter entre os fusos horários?

StackOverflow https://stackoverflow.com/questions/1422880

  •  07-07-2019
  •  | 
  •  

Pergunta

Estou lendo o não tão completo Documentação Pytz E estou preso ao entender uma parte disso.

A conversão entre os fusos horários também precisa de atenção especial. Isso também precisa usar o método normalizado para garantir que a conversão esteja correta.

>>> utc_dt = utc.localize(datetime.utcfromtimestamp(1143408899))
>>> utc_dt.strftime(fmt)
'2006-03-26 21:34:59 UTC+0000'
>>> au_tz = timezone('Australia/Sydney')
>>> au_dt = au_tz.normalize(utc_dt.astimezone(au_tz))
>>> au_dt.strftime(fmt)
'2006-03-27 08:34:59 EST+1100'
>>> utc_dt2 = utc.normalize(au_dt.astimezone(utc))
>>> utc_dt2.strftime(fmt)
'2006-03-26 21:34:59 UTC+0000'

Eu tentei este mesmo exemplo sem usando normalize E ficou da mesma forma. Na minha opinião, este exemplo realmente não explica Por quê Temos que usar normalize Ao converter entre datetime objetos em diferentes fusos horários.

Alguém por favor me daria um exemplo (como o acima) onde o resultado difere quando não está usando normalize.

Obrigado

Foi útil?

Solução

Da documentação Pytz:

Além disso, se você executar a date aritmética nos tempos locais que cruzam os limites do DST, os resultados podem estar em um fuso horário incorreto (ou seja, subtrair 1 minuto de 2002-10-27 1:00 EST e você recebe 2002-10-27 0: 59 EST em vez do correto 2002-10-27 1:59 EDT). Um método normalize () é fornecido para corrigir isso. Infelizmente, esses problemas não podem ser resolvidos sem modificar a implementação do Python DateTime.

Outras dicas

Os documentos dizem que a normalização é usada como uma solução alternativa para questões de DST:

Além disso, se você executar a date aritmética nos tempos locais que cruzam os limites do DST, os resultados podem estar em um fuso horário incorreto (ou seja, subtrair 1 minuto de 2002-10-27 1:00 EST e você recebe 2002-10-27 0: 59 EST em vez do correto 2002-10-27 1:59 EDT). Um método normalize () é fornecido para corrigir isso.

Portanto, é usado para corrigir alguns casos de borda envolvendo o horário de verão. Se você não estiver usando fusos horários do DST (por exemplo, UTC), não é necessário usar normalizar.

Se você não usar, sua conversão pode ter uma hora de folga em determinadas circunstâncias.

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