Python: imprimer le fuseau horaire de strftime
Je veux imprimer le fuseau horaire. J'ai utilisé %Z
mais il n'a pas d'impression:
import datetime
now = datetime.datetime.now()
print now.strftime("%d-%m-%Y")
print now.strftime("%d-%b-%Y")
print now.strftime("%a,%d-%b-%Y %I:%M:%S %Z") # %Z doesn't work
Dois-je peut-être besoin d'importer pytz
?
- Est qui exactement votre code? Il fonctionne pour moi une fois que j'ai supprimer la répétition de "maintenant".
- ....eh bien, vous avez besoin d'un fuseau horaire-conscient datetime, et pytz serait travailler pour que, donc, je vais aller avec "oui"
Vous devez vous connecter pour publier un commentaire.
C'est un comportement documenté:
datetime.now()
retourne un naïf objet datetime et%Z
renvoie une chaîne vide dans de tels cas. Vous avez besoin d'une connaissance objet datetime à la place.Pour imprimer un local, l'abréviation du fuseau horaire, vous pouvez utiliser
tzlocal
module que pouvez retourner votre fuseau horaire local comme unpytz
tzinfo objet qui peut contenir un historique fuseau horaire info par exemple, à partir de la base de données tz:Ce code fonctionne pour les fuseaux horaires avec/sans l'heure d'été. Il fonctionne autour et au cours de l'heure d'été transitions. Il fonctionne si le fuseau horaire local avait différents décalage utc dans le passé, même si la bibliothèque C utilisée par python n'a pas accès à un historique de fuseau horaire de la base de données sur la plate-forme donnée.
En Python 3.3,+, lors de la plate-forme prend en charge, vous pouvez utiliser
.tm_zone
l'attribut, pour obtenir le tzname:Ou à l'aide de
datetime
module:Le code est portable, mais le résultat peut être incorrect sur certaines plates-formes (sans
.tm_zone
(datetime
a utilisertime.tzname
dans ce cas) et avec "intéressant" fuseaux horaires).Sur les anciennes versions de Python, sur un système avec un "inintéressant" fuseau horaire, vous pouvez utiliser
time.tzname
:Un exemple d'un "intéressant" le fuseau horaire Europe/Moscow fuseau horaire en période 2010 à 2015.
Des problèmes similaires sont discutés dans L'obtention de l'ordinateur décalage UTC en Python.
now()
retourne un objet de la classedatetime.datetime
, ce qui n'est pas, en soi, contenir des informations sur son fuseau. (c'est à dire qu'il est "naïf"; voir la description de "naïf" et "conscient" de la date et de l'heure des objets dans la documentation)Selon la la documentation,
Pour obtenir votre plate-forme de fuseau horaire local, vous devez utiliser, comme vous le suggérez,
pytz
. Voici Alex Martelli du code pour faire cela:Vous pouvez également obtenir les réels UTC offset, en heures, par l'intermédiaire de:
De sorte que vous pouvez utiliser: