Étant donné un fuseau horaire pytz pour un utilisateur particulier (calculé à partir de son décalage), je souhaite afficher le nom commun de ce fuseau horaire. Je suppose que les gens sont plus habitués à voir EST ou PST au lieu de l'orthographe comme America/NewYork.
Est-ce que pytz me donne ces noms standard quelque part, ou devrais-je le faire manuellement via une table? Cela pourrait potentiellement devenir désordonné, car par exemple, les lieux sont EST dans une saison et passent à montrer EDT pendant d'autres.
Étant donné un fuseau horaire pytz pour un utilisateur particulier (calculé à partir de son décalage), je souhaite afficher le nom commun de ce fuseau horaire. Je suppose que les gens sont plus habitués à voir EST ou PST au lieu d'être énoncés comme America/NewYork.
Si vous en avez besoin dérivé d'un objet datetime
localisé avec pytz
...
>>> import pytz as tz
>>> from datetime import datetime as dt
>>> CT = tz.timezone('America/Chicago')
>>>
>>> summer_day = dt(2010, 7, 4, 0, 1, 1)
>>> bar = CT.localize(summer_day, is_dst=None)
>>> bar.tzname()
'CDT'
>>>
>>> christmas = dt(2010, 12, 25, 0, 1, 1)
>>> foo = CT.localize(christmas, is_dst=None)
>>> foo.tzname()
'CST'
>>>
Vous pouvez utiliser la méthode tzname()
des instances tzinfo
:
>>> tz = timezone('America/St_Johns')
>>> normal = datetime(2009, 9, 1)
>>> tz.tzname(normal, is_dst=False)
'NDT'
Si vous recherchez les abréviations, il y a quelques façons qui vous viennent à l'esprit.
Le premier serait:
>>> from pytz import timezone
>>> eastern = timezone('US/Eastern')
>>> eastern._tzname
'EST'
Bien que cela fasse référence à une propriété avec le soulignement unique précédent, il peut être considéré comme privé et peut-être pas le meilleur endroit pour l'attraper. L'autre proviendrait d'un objet datetime localisé.
>>> from datetime import datetime
>>> loc_dt = eastern.localize(datetime.now())
>>> loc_dt.strftime('%Z')
'EST'
Ce n'était peut-être pas le cas lorsque cette question a été rédigée à l'origine, mais voici un extrait pour obtenir la désignation officielle du fuseau horaire:
>>> eastern = timezone('US/Eastern')
>>> eastern.zone
'US/Eastern'
En outre, cela peut être utilisé avec un objet datetime non naïf (alias un datetime où le fuseau horaire réel a été défini à l'aide de pytz.<timezone>.localize(<datetime_object>)
ou datetime_object.astimezone(pytz.<timezone>)
comme suit:
>>> import datetime, pytz
>>> todaynow = datetime.datetime.now(tz=pytz.timezone('US/Hawaii'))
>>> todaynow.tzinfo # turned into a string, it can be split/parsed
<DstTzInfo 'US/Hawaii' HST-1 day, 14:00:00 STD>
>>> todaynow.strftime("%Z")
'HST'
>>> todaynow.tzinfo.zone
'US/Hawaii'
C'est, bien sûr, pour l'édification des utilisateurs de moteurs de recherche qui ont atterri ici. ... Voir plus sur le site du module pytz .