Domanda

Sto leggendo la documentazione pytz non così completa e sono bloccata nel capirne una parte .

  

Anche la conversione tra fusi orari richiede un'attenzione particolare. Questo deve anche utilizzare il metodo normalize per garantire che la conversione sia corretta.

>>> 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'

Ho provato questo esempio senza usando normalizzare e si è scoperto lo stesso. A mio avviso questo esempio non spiega davvero perché dobbiamo usare normalize quando convertiamo oggetti datetime in diversi fusi orari.

Qualcuno potrebbe darmi un esempio (come quello sopra) in cui il risultato differisce quando non si utilizza normalize .

Grazie

È stato utile?

Soluzione

Dalla documentazione di pytz:

  

Inoltre, se si esegue l'aritmetica della data sugli orari locali che attraversano i confini dell'ora legale, i risultati potrebbero essere in un fuso orario errato (ad es. sottrarre 1 minuto dal 2002-10-27 1:00 EST e si ottiene 2002-10- 27 0:59 EST invece del corretto 2002-10-27 1:59 EDT). Un metodo normalize () è fornito per correggere questo. Sfortunatamente questi problemi non possono essere risolti senza modificare l'implementazione del datetime di Python.

Altri suggerimenti

I documenti dicono che normalize viene utilizzato come soluzione alternativa per problemi di ora legale:

  

Inoltre, se si esegue l'aritmetica della data sugli orari locali che attraversano i confini dell'ora legale, i risultati potrebbero essere in un fuso orario errato (ad es. sottrarre 1 minuto dal 2002-10-27 1:00 EST e si ottiene 2002-10- 27 0:59 EST invece del corretto 2002-10-27 1:59 EDT). Un metodo normalize () è fornito per correggere questo.

Quindi è usato per correggere alcuni casi limite che coinvolgono l'ora legale. Se non stai utilizzando i fusi orari DST (ad es. UTC), non è necessario utilizzare normalize.

Se non lo usi, in determinate circostanze la tua conversione potrebbe essere potenzialmente di un'ora di pausa.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top