Python analyser format de la date, de l'ignorer certaines parties de la chaîne
Je veux " pour analyser les dates dans ce format, mais ignorer certaines parties de la chaîne. 'Wed, 27 Oct 1770 22:17:00 GMT" De ce que j'ai recueillies, datetime ne prend pas en charge les fuseaux horaires très bien. Ce qui est bien, vraiment, je veux juste ignorer le fuseau horaire de la partie de la chaîne, sans avoir à faire de manipulation de chaîne. Est-il quelque chose que je peux remplacer %Z avec ci-dessous pour dire "n'importe quelle chaîne ici" et d'analyser les dates en tant que tel? Aussi, je ne comprends pas pourquoi il analyse les fuseaux horaires comme PST, GMT, mais pas de l'est. Il ne semble pas attacher tzinfo en tout cas, de toute façon, vous ne savez pas quels types de chaîne sont vraiment à la recherche pour le %Z partie.
>>> import datetime
>>> y = datetime.datetime.strptime('Wed, 27 Oct 1770 22:17:00 GMT', '%a, %d %b %Y %H:%M:%S %Z')
>>> y = datetime.datetime.strptime('Wed, 27 Oct 1770 22:17:00 PST', '%a, %d %b %Y %H:%M:%S %Z')
>>> y = datetime.datetime.strptime('Wed, 27 Oct 1770 22:17:00 EST', '%a, %d %b %Y %H:%M:%S %Z')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/opt/brazil-pkg-cache/packages/Python/Python-2.5.1.17.1/RHEL5_64/DEV.STD.PTHREAD/build/lib/python2.5/_strptime.py", line 331, in strptime
(data_string, format))
ValueError: time data did not match format: data=Wed, 27 Oct 1770 22:17:00 EST fmt=%a, %d %b %Y %H:%M:%S %Z
Remarque: dateutil n'est pas une option pour moi, je veux soutenir de nombreux formats et ne peut pas se permettre dateutil accidentellement interpréter les dates de mal. (c'est à dire dateutil semble deviner quand on voit les dates comme 01/02/2010, Feb 1? ou Jan 2?). En gros, je veux juste essayer d'accepter les formats je l'ai préciser dans la commande jusqu'à ce que je obtenir une correspondance.
OriginalL'auteur Alex Amato | 2010-10-29
Vous devez vous connecter pour publier un commentaire.
Avez-vous vraiment regardé les docs pour dateutil?
dateutil.parser.parse()
n'ont arguments qui vous permettent de contrôler la priorité, dans son format devineur et il a aussi uneignoretz=True
argument.Si cela ne suffisait pas, il y a probablement un peu de classe, vous pouvez remplacer pour mettre en œuvre vos propres règles de priorité.
Bien sûr, sinon, vous aurez probablement à la station de traitement de chaîne depuis Python strptime() de la mise en œuvre des appels à la C sous-jacente de mise en œuvre pour résoudre les noms de fuseau horaire. (Je ne sais pas pourquoi il n'est pas la compréhension est pour vous, mais c'est probablement à l'échelle du système et non pas un problème sur certains systèmes)
OriginalL'auteur ssokolow
Même si je suis d'accord avec @Miguel, +1 pour une réponse unique qui répond à la question.
N'est-ce pas plus simple: ''.join('Wed, 17 Oct 2011 22:22:22 +0300'.split()[1:6]) Également au-dessus de la coutume de travail b/c du fuseau horaire. Vous obtenez ValueError: non converti les données restent
OriginalL'auteur Tomi
Je ne pense pas que c'est possible de le faire complètement sans les manipulations de chaînes, mais c'est peut être une option. Regardez de temps et d'essayer quelque chose comme cela:
OriginalL'auteur inf.ig.sh
Il ne semble pas être un moyen de le faire strptime(). Je sais que vous avez dit que vous ne vouliez pas faire de manipulation de chaîne, mais vous ne pouvez pas avoir un choix. Vous pouvez soit effectuer de nettoyage de données où vous tout d'abord snarf la chaîne de date/heure à partir de l'entrée, ou vous pouvez créer
mystrptime()
et ne faire que de la manipulation de l'exception. Le code suivant est incorrect car il ne gère pas le cas général d' %Z produit n'importe où dans la chaîne, mais vous obtenez l'idée.OriginalL'auteur Peter Rowell