Comment puis-je imprimer un Python datetime dans le fuseau horaire local?
Disons que j'ai une variable de la t qui est mis à ceci:
datetime.datetime(2009, 7, 10, 18, 44, 59, 193982, tzinfo=<UTC>)
Si je dis str(t)
, j'obtiens:
'2009-07-10 18:44:59.193982+00:00'
Comment puis-je obtenir une chaîne similaire, à l'exception imprimé dans le fuseau horaire local plutôt que de l'UTC?
local pour quoi?
connexes: Comment faire pour convertir un python utc datetime pour un datetime local en utilisant uniquement de la bibliothèque standard de python?
connexes: Comment faire pour convertir un python utc datetime pour un datetime local en utilisant uniquement de la bibliothèque standard de python?
OriginalL'auteur mike | 2009-07-10
Vous devez vous connecter pour publier un commentaire.
Pense que vous devriez regarder autour de: datetime.astimezone()
http://docs.python.org/library/datetime.html#datetime.datetime.astimezone
Voir aussi pytz - module, c'est assez facile à utiliser-comme par exemple:
http://pytz.sourceforge.net/
Exemple:
n'est-ce pas datetime.datetime(2009, 7, 10, 18, 44, 59, 193982) - ce dont vous avez besoin?
Cette réponse est fausse. Je vis en Angleterre et US/Eastern n'est PAS la local fuseau horaire.
Non, parce que la résultante de l'objet n'est pas datetime conscient. Vous ne savez pas quel fuseau horaire où vous vous trouvez.
href="https://pypi.python.org/pypi/tzlocal" >
tzlocal.get_localzone()
vous donne votre fuseau horaire local.OriginalL'auteur Mikhail Churbanov
Je crois que la meilleure façon de le faire est d'utiliser la
LocalTimezone
classe définie dans ledatetime.tzinfo
documentation (goto http://docs.python.org/library/datetime.html#tzinfo-objects et faites défiler jusqu'à la "Exemple tzinfo classes"):En supposant
Local
est une instance deLocalTimezone
puis
str(local_t)
donne:qui est ce que vous voulez.
(Note: cela peut paraître étrange à vous parce que je suis en Nouvelle-Galles du Sud, Australie, qui est de 10 ou 11 heures à l'avance UTC)
str(datetime.datetime.now(tz=Local))
Sachez que cette impression sera utile avec le décalage UTC qui est actuellement en vigueur, qui ne peut pas être le même qui a été ou qui seront en vigueur au moment donné par le
datetime
instance (en raison de l'heure d'été).LocalTimezone
peut échouer pour les dates antérieures si le sous-jacenttime
mise en œuvre n'est pas l'utilisation d'un historique fuseau horaire de base de données (Windows est notamment dans cette catégorie).Je pense que l'argument de astimezone doit être vide:
t.astimezone()
OriginalL'auteur HughE
J'utilise cette fonction
datetime_to_local_timezone()
, qui semble trop compliquée, mais je n'ai trouvé aucune version plus simple d'une fonction qui convertit undatetime
exemple sur le fuseau horaire local, tel que configuré dans le système d'exploitation, avec le décalage UTC qui était en vigueur à l'époque:Cet exemple imprime quatre dates. Pour deux moments dans le temps, en janvier et en juillet 2009, chaque, il imprime le timestamp une fois dans l'heure UTC et une fois dans le fuseau horaire local. Ici, où la CET (UTC+01:00) est utilisé en hiver et CEST (UTC+02:00) est utilisé dans l'été, il imprime le suivant:
.timestamp()
méthode) Dans ce cas vous pouvez utiliser un simple code:dt.astimezone(tz=None)
. Également utilisertimezone.utc
au lieu detimezone(datetime.timedelta())
.OriginalL'auteur Feuermurmel
J'ai écrit quelque chose comme ça l'autre jour:
Donc la partie la plus intéressante pour vous, c'est probablement la ligne de départ avec "mytz=...". temps.fuseau horaire retourne le fuseau horaire local, mais de signe opposé par rapport à l'heure UTC. Donc, il dit: "-3600" pour exprimer UTC+1.
En dépit de son ignorance envers l'Heure d'été (DST, voir le commentaire), je pars de ce dans pour les personnes de bidouiller avec
time.timezone
.time.timezone
contenir le décalage UTC qui est utilisé lorsque l'heure d'été n'est pas en vigueur, peu importe si c'est le cas actuellement en vigueur.OriginalL'auteur ThomasH
De python 3.2, en utilisant uniquement les fonctions de bibliothèque standard:
Juste besoin d'utiliser
l_tm - u_tm
ouu_tm - l_tm
selon que vous souhaitez afficher comme + ou - heures à partir de l'UTC. Je suis en MST, qui est l'endroit où la -07 vient de. Plus intelligente code doit être en mesure de comprendre de quelle manière à soustraire.Et seulement besoin de calculer le fuseau horaire local une fois. Qui ne va pas changer. Au moins jusqu'à ce que vous passez à partir de/à l'heure d'été.
OriginalL'auteur mMerlin