265 votes

Python strptime () et les fuseaux horaires?

J'ai un fichier CSV à partir d'un fichier de vidage Blackberry IPD de sauvegarde, créé à l'aide de IPDDump. La date/heure de chaînes à regarder ici, quelque chose comme ça (où EST est un Australien fuseau horaire):

Tue Jun 22 07:46:22 EST 2010

J'ai besoin d'être en mesure d'analyser cette date en Python. Au début, j'ai essayé d'utiliser l' strptime() fonction de datettime.

>>> datetime.datetime.strptime('Tue Jun 22 12:10:20 2010 EST', '%a %b %d %H:%M:%S %Y %Z')

Cependant, pour une raison quelconque, l' datetime objet qui vient en arrière ne semble pas avoir tout tzinfo y sont associés.

J'ai lu sur cette page qui, apparemment, datetime.strptime rejette tzinfo, cependant, j'ai vérifié la documentation, et je ne peux pas trouver quelque chose à cet effet documenté ici.

J'ai été en mesure d'obtenir la date analysée à l'aide d'un tiers bibliothèque Python, dateutil, mais je suis toujours curieux de la façon dont j'ai été l'aide à la strptime() de façon incorrecte? Est-il possible de l' strptime() jouer gentiment avec les fuseaux horaires?

447voto

Joe Shaw Points 6386

Je recommande l'utilisation de python-dateutil. Son analyseur a été en mesure d'analyser tous les format de date que j'ai jeté à elle jusqu'à présent.

>>> from dateutil import parser
>>> parser.parse("Tue Jun 22 07:46:22 EST 2010")
datetime.datetime(2010, 6, 22, 7, 46, 22, tzinfo=tzlocal())
>>> parser.parse("Fri, 11 Nov 2011 03:18:09 -0400")
datetime.datetime(2011, 11, 11, 3, 18, 9, tzinfo=tzoffset(None, -14400))
>>> parser.parse("Sun")
datetime.datetime(2011, 12, 18, 0, 0)
>>> parser.parse("10-11-08")
datetime.datetime(2008, 10, 11, 0, 0)

et ainsi de suite. No dealing avec strptime() format de bêtises... il suffit de jeter un jour et il Fait La bonne Chose.

Mise À Jour: Oups. J'ai manqué à votre question initiale que vous avez mentionné que vous avez utilisé dateutil, désolé. Mais j'espère que cette réponse est encore utile à d'autres gens qui trébuchent à travers cette question lorsqu'ils ont de la date de l'analyse des questions et de voir l'utilité de ce module.

94voto

John Machin Points 39706

La documentation dit """Return datetime correspondant à date_string, analysé selon le format. C'est l'équivalent de datetime(*(de temps.strptime(date_string, format)[0:6])).""" Voir qu' [0:6]? Que vous obtient (année,mois,jour,heure,minute,seconde). Rien d'autre. Aucune mention de fuseaux horaires.

Il est intéressant de noter, [Win XP SP2, Python 2.6, 2.7] en passant par votre exemple, à time.strptime ne fonctionne pas, mais si vous enlevez le "%Z" et le "EST" il ne le travail. Aussi à l'aide de "UTC" ou "GMT" au lieu de "EST" travaille. "PST" et "MEZ" ne fonctionnent pas. Déroutante.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X