2009-02-02 3 views
20

Mit einem Python-Skript muss ich eine CVS-Datei lesen, in der Datumsangaben als DD/MM/YYYY formatiert sind, und vor dem Speichern in eine SQLite-Datenbank in YYYY-MM-DD konvertieren.Konvertieren Datum zwischen DD/MM/YYYY und YYYY-MM-DD?

Diese fast funktioniert, aber nicht, weil ich keine Zeit liefern:

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 

Ich nehme an, es ist ein Verfahren, in dem Datetime-Objekt, das diese Umwandlung sehr einfach durchzuführen, aber ich kann ein Beispiel für nicht finden wie es geht. Vielen Dank.

Antwort

11

Sie zuerst benötigen würden Zeichenfolge in Datetime-Tupel zu konvertieren, und dann den Datetime-Tupels Zeichenfolge konvertieren, würde es so gehen:

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

Sagen "Tupel" scheint ein bisschen verwirrend; ab Python 2.2, 'strptime()' [gibt "a' struct_time' "] (http://docs.python.org/library/time.html#time.strptime) zurück, welches [ist ein Objekt] (http: //docs.python.org/library/time.html#time.struct_time) mit einer "benannten Tupel" -Schnittstelle. – supervacuo

43

Ihr Beispielcode falsch ist. Dies funktioniert:

import datetime 

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

Der Aufruf von strptime() analysiert das erste Argument entsprechend dem Format in der zweiten angegeben, so die beiden übereinstimmen müssen. Dann können Sie strftime() aufrufen, um das Ergebnis in das gewünschte endgültige Format zu formatieren.

3

Gibt es sonst noch jemanden, der es für eine Verschwendung hält, diese Zeichenfolgen in Datum/Uhrzeit-Objekte zu konvertieren, was schließlich eine einfache Textumwandlung ist? Wenn Sie sicher, dass die eingehenden Termine sind werden gültig, können Sie einfach verwenden:

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

Dies wird mit ziemlicher Sicherheit schneller sein als die Umstellung auf und von einem Datum.

+8

Wenn Sie über die Geschwindigkeit der Konvertierung besorgt sind, haben Sie offensichtlich nichts anderes mehr, worüber Sie sich Sorgen machen müssen. Der Code, der von Unload gepostet wird, ist so viel klarer und wartungsfreundlicher als deins. Das sollte Ihre Hauptsorge sein, nicht die Geschwindigkeit. –

+0

Ich vermisse die Möglichkeit, diesen Kommentar abzustimmen. –

1

Ich bin neu in der Programmierung. Ich wollte von yyyy-mm-dd zu dd/mm/yyyy konvertieren, um ein Datum in dem Format auszudrucken, das Leute in meinem Teil der Welt benutzen und erkennen.

Die oben genannte Antwort hat mich auf den richtigen Weg gebracht.

Die Antwort, die ich mit meinem Problem gelandet ist:

import datetime 

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

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

Die ersten beiden Zeilen nach der Import-Anweisung der heutigen Datum in den USA Format gibt (2017.01.26). Die letzten beiden Zeilen konvertieren dies in das Format, das in Großbritannien und anderen Ländern anerkannt ist (26/01/2017).

Sie können diesen Code verkürzen, aber ich habe ihn so gelassen, weil er mir als Anfänger hilfreich ist. Ich hoffe, das hilft anderen Anfängerprogrammierern zu Beginn!

+0

Hallo und willkommen bei StackOverflow. Deine Antwort geht nicht wirklich mit der Frage um, die von einer Umwandlung von "DD/MM/YYYY" in "YYYY-MM-DD" handelt. Dein Beitrag kann gelöscht werden, aber ich ermutige dich, auf der Seite aktiv zu bleiben. Vielen Dank! – lrnzcig

+0

@lrnzcig Vielen Dank für Ihren Kommentar. Ich verstehe was du meinst. Vielleicht hätte ich meine Frage stellen und jemand antworten lassen sollen - ich hatte bis jetzt viele Fragen, aber ich habe es geschafft, sie zu beantworten, indem ich online und in meinem treuen Python Buch gucke – Mark