0
votes

Conversion de la chaîne en date de l'heure lorsque la chaîne ne correspond pas à un format de date spécifique

J'ai des problèmes pour obtenir la chaîne suivante convertie en un objet DateTime à l'aide de Python. J'ai un gros fichier CSV (plus de 10k lignes) et j'ai besoin de transformer une colonne de dates du format suivant: xxx

à: xxx

Ma première pensée était d'utiliser DateTime.stryptime, ce qui nécessite de passer dans la chaîne et du format de date à laquelle il se trouve, car je peux simplement reformater un type de date à un autre réel facile. Le problème que je vais avoir est que je ne sais pas comment représenter cette chaîne sous forme de format de date, principalement en raison du fuseau horaire.

Mes meilleures devinons pour le format de date dont j'ai besoin est '% mmm% dd ,% yyyy% h:% m:% S% AA 'Mais je ne peux pas comprendre comment représenter le fuseau horaire ici (et je ne suis pas sûr que je ne suis pas sûr de AM / PM étant% AA).

J'ai essayé de regarder d'autres discussions, mais ils semblent tous avoir facilement des cordes pouvant correspondre.

merci!


2 commentaires

Comme vous ne mentionnez que l'analyse de la partie de date, vous souciez-vous de l'heure ou du Timzone? Ne pouviez-vous pas tout simplement ignorer tout après l'année ou aurez-vous besoin de la partie de temps plus tard?


Ouais, je vais bien couper l'heure et le fuseau horaire complètement, je viens de supposer que je devais convertir le tout avant de le faire. Existe-t-il un moyen de tout ignorer après l'année de la conversion sur l'objet DateTime?


3 Réponses :


1
votes

Le format est documenté dans le tableau suivant, en particulier, AM / PM est % p et timezone est % z :

https: //docs.python .Org / 3 / Bibliothèque / DateTime.html # Codes de format StrfTime-and-STRPTIME

Cependant, dans votre cas, je suggérerais de ne pas vous embêter avec la analyse du tout, mais comptez sur DateUtil pour faire l'analyse. Il est plus flexible car il peut comprendre le bon format presque toujours.


0 commentaires

0
votes

Je vais bien couper l'heure et le fuseau horaire complètement p>

Alors vous avez beaucoup de choix. Comme déjà mentionné, DateUtil est cool et travaillerait bien. Mais si vous vouliez rester dans DateTime pour une raison quelconque, vous pouvez: p>

  • Analysez le tout, mais sachez que le fuseau horaire est ignoré li> ul>

    DateTime / STRPTIME peut analyser le tout, mais ne comprend pas / convertir / convertir des fuseaux horaires. Si vous faites cela, il suffira de l'analyser comme UTC. P>

    >>> ts = "Jun 1, 2020 12:11:49 AM PDT"
    >>> str(datetime.strptime(ts.rpartition(" ")[0], "%b %d, %Y %I:%M:%S %p"))
    '2020-06-01 00:11:49'
    

3 commentaires

Je viens d'essayer d'utiliser DateUtil, mais j'ai eu l'avertissement suivant: InnownnyZonewarning: Tzname PDT identifié mais non compris. Pass tzinfos argument afin de renvoyer correctement une DateTime ajout de fuseau horaire. Dans une version future, cela constituera une exception. Je l'ai fait "d'Aptutil.Parser Import *" puis de l'analyser, je viens de "Jour = Analys (String)"


En outre, j'ai essayé d'utiliser Strptime comme vous l'avez dit, mais j'ai eu une erreur: VangerError: Données de l'heure 'Juin 1, 2020 12:00:26 AM PDT' ne correspond pas au format '% B% D,% Y% I:% M:% S% p% z '


Oui, je n'ai pas réalisé que cela ne fonctionne que avec certaines cordes (même si cela ne convient pas réellement sur le fuseau horaire).



0
votes

En tant que @AndrTAM déjà suggéré, vous pouvez utiliser un analyseur DateUtil pour analyser facilement une telle chaîne. Pour analyser correctement le fuseau horaire, vous pouvez le fournir avec un mappage dict : xxx

maintenant, vous pouvez facilement formater à la chaîne: xxx


0 commentaires