2009-02-02 5 views
20

En utilisant un script Python, j'ai besoin de lire un fichier CVS où les dates sont formées en JJ/MM/AAAA, et les convertir en AAAA-MM-JJ avant de l'enregistrer dans une base de données SQLite.Date de conversion entre JJ/MM/AAAA et AAAA-MM-JJ?

Ce presque fonctionne, mais échoue parce que je ne fournit pas le temps:

from datetime import datetime 

lastconnection = datetime.strptime("21/12/2008", "%Y-%m-%d") 

#ValueError: time data did not match format: data=21/12/2008 fmt=%Y-%m-%d 
print lastconnection 

Je suppose qu'il ya une méthode dans l'objet datetime pour effectuer cette conversion très facilement, mais je ne peux pas trouver un exemple de comment faire. Je vous remercie.

Répondre

11

vous devez d'abord convertir chaîne en tuple datetime, puis convertir cette tuple datetime à chaîne, il irait comme ceci:

lastconnection = datetime.strptime("21/12/2008", "%d/%m/%Y").strftime('%Y-%m-%d') 
+0

Dire "tuple" semble un peu confus; à partir de Python 2.2, 'strptime()' [renvoie "a' struct_time' "] (http://docs.python.org/library/time.html#time.strptime), qui [est un objet] (http: //docs.python.org/library/time.html#time.struct_time) avec une interface "named tuple". – supervacuo

43

Votre exemple de code est erroné. Cela fonctionne:

import datetime 

datetime.datetime.strptime("21/12/2008", "%d/%m/%Y").strftime("%Y-%m-%d") 

L'appel à strptime() parse le premier argument selon le format spécifié dans la seconde, donc les deux doivent correspondre. Ensuite, vous pouvez appeler strftime() pour formater le résultat dans le format final désiré.

3

Quelqu'un d'autre pense-t-il que c'est une perte de convertir ces chaînes en objets date/heure pour ce qui, au final, est une simple transformation de texte? Si vous êtes certain que les dates d'arrivée seront valides, vous pouvez simplement utiliser:

>>> ddmmyyyy = "21/12/2008" 
>>> yyyymmdd = ddmmyyyy[6:] + "-" + ddmmyyyy[3:5] + "-" + ddmmyyyy[:2] 
>>> yyyymmdd 
'2008-12-21' 

Ce sera certainement plus rapide que la conversion vers et à partir d'une date.

+8

Si vous vous inquiétez de la vitesse de conversion à ce jour, vous n'avez plus rien à craindre. Le code publié par unwind est tellement plus clair et maintenable que le vôtre. Cela devrait être votre principale préoccupation ici, pas la vitesse. –

+0

La possibilité de voter pour ce commentaire me manque. –

1

Je suis novice en programmation. Je voulais convertir yyyy-mm-dd en dd/mm/yyyy pour imprimer une date dans le format que les gens dans ma partie du monde utilisent et reconnaissent.

La réponse acceptée ci-dessus m'a mis sur la bonne voie.

La réponse J'ai fini avec mon problème est:

import datetime 

today_date = datetime.date.today() 
print(today_date) 

new_today_date = today_date.strftime("%d/%m/%Y") 
print (new_today_date) 

Les deux premières lignes après la déclaration d'importation donne la date du jour au format USA (26/01/2017). Les deux dernières lignes le convertissent au format reconnu au Royaume-Uni et dans d'autres pays (26/01/2017).

Vous pouvez raccourcir ce code, mais je l'ai laissé tel quel parce que cela me sert de débutant. J'espère que cela aidera d'autres programmeurs débutants à démarrer!

+0

Bonjour et bienvenue sur StackOverflow. Votre réponse ne va pas vraiment avec la question, qui portait sur une conversion de «JJ/MM/AAAA» à «AAAA-MM-JJ». Votre message peut être supprimé, mais je vous encourage à rester actif sur le site. Merci! – lrnzcig

+0

@lrnzcig Merci pour votre commentaire. Je vois ce que tu veux dire. Peut-être que j'aurais dû poster ma question et laisser quelqu'un y répondre - j'ai eu beaucoup de questions jusqu'à présent, mais j'ai réussi à y répondre en regardant en ligne et dans mon fidèle livre en python – Mark

Questions connexes