Pytz: Por que a normalização é necessária ao converter entre os fusos horários?
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
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.