pytz: Pourquoi la normalisation est-elle nécessaire lors de la conversion entre les fuseaux horaires?

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

  •  07-07-2019
  •  | 
  •  

Question

Je suis en train de lire la documentation pytz pas très complète et je suis coincé pour en comprendre une partie. .

  

La conversion entre les fuseaux horaires nécessite également une attention particulière. Cela nécessite également l’utilisation de la méthode normalize pour s’assurer que la conversion est correcte.

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

J'ai essayé cet exemple même sans utiliser normalize et le résultat est identique. A mon avis, cet exemple n'explique pas vraiment pourquoi nous devons utiliser normalize lors de la conversion d'objets datetime dans des fuseaux horaires différents.

Est-ce que quelqu'un pourrait me donner un exemple (comme celui ci-dessus) où le résultat est différent lorsque vous n'utilisez pas normalize .

Merci

Était-ce utile?

La solution

Dans la documentation pytz:

  

De plus, si vous effectuez une opération arithmétique sur les dates aux heures locales qui dépassent les limites de l'heure d'été, les résultats risquent de ne pas correspondre à un fuseau horaire correct (par exemple, soustrayez 1 minute du 2002-10-27 à 1:00 EST et obtenez le 27 0:59 EST au lieu du correct 2002-10-27 1:59 EDT). Une méthode normalize () est fournie pour corriger cela. Malheureusement, ces problèmes ne peuvent pas être résolus sans modifier l’implémentation datetime Python.

Autres conseils

La documentation indique que normaliser est utilisé comme solution de contournement pour les problèmes DST:

  

De plus, si vous effectuez une opération arithmétique sur les dates aux heures locales qui dépassent les limites de l'heure d'été, les résultats risquent de ne pas correspondre à un fuseau horaire correct (par exemple, soustrayez 1 minute du 2002-10-27 à 1:00 EST et obtenez le 27 0:59 EST au lieu du correct 2002-10-27 1:59 EDT). Une méthode normalize () est fournie pour corriger ceci.

Donc, il est utilisé pour corriger certains cas critiques impliquant DST. Si vous n’utilisez pas de fuseaux horaires DST (par exemple, UTC), il n’est pas nécessaire d’utiliser la normalisation.

Si vous ne l'utilisez pas, votre conversion pourrait prendre une heure dans certaines circonstances.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top