2016-05-04 9 views
-1

Ich benutze Python 3.5.Konvertieren String in Python-Datetime-Objekt ohne Nullauffüllung

Ich habe eine Zeichenfolge formatiert als mm/dd/yyyy H:MM:SS AM/PM, die ich als Python-Datetime-Objekt möchte.

Hier ist was ich versucht habe.

date = "09/10/2015 6:17:09 PM" 
    date_obj = datetime.datetime.strptime(date, '%d/%m/%Y %I:%M:%S %p') 

Aber dies wird ein Fehler, weil die Stunde nicht Null gepolstert ist. Die Formatierung erfolgte nach der Tabelle datetime documentation, die es der Stunde nicht erlaubt, eine Ziffer zu haben.

Ich habe versucht, das Datum aufzuspalten, eine Null hinzuzufügen und dann die Schnur wieder zusammenzufügen, während dies funktioniert, scheint dies weniger robust/ideal.

date = "09/10/2015 6:17:09 PM" 
    date = date.split() 
    date = date[0] + " 0" + date[1] + " " + date[2] 

Jede Empfehlung, wie direkt das datetime-Objekt zu erhalten, oder eine bessere Methode für die Stunde padding wäre hilfreich.

Vielen Dank.

+1

Ich habe '2015.10.09 18: 17: 09' als Ausgang in Python 2.7. Können Sie eine bestimmte Ausnahme teilen? und welche Version von Python bist du? –

+0

Dies ist nicht die Ursache des Problems, aber Sie geben an, dass die Datumszeichenfolge als "MM/TT/JJJJ" formatiert ist, der Code jedoch "% d /% m /% Y" annimmt, dh Tag und Monat werden vertauscht . – mhawke

Antwort

0

Es ist nichts falsch mit diesem Code:

>>> date = "09/10/2015 6:17:09 PM" 
>>> date_obj = datetime.datetime.strptime(date, '%m/%d/%Y %I:%M:%S %p') 
>>> date_obj 
datetime.datetime(2015, 9, 10, 18, 17, 9) 
>>> print(date_obj) 
2015-09-10 18:17:09 

Die einzelnen Attribute des datetime Objekt ganze Zahlen sind, nicht Strings und die interne Darstellung verwendet 24-Std.-Werte für die Stunde.

Beachten Sie, dass ich den Tag und den Monat in den Formatzeichenfolgen ausgetauscht habe, da Sie angeben, dass das Eingabeformat mm/dd/yyyy ist.

Aber es scheint, dass Sie es tatsächlich als String mit Nullen aufgefüllt Stunde wollen, so können Sie datetime.strftime() wie folgt verwenden:

>>> date_str = date_obj.strftime('%m/%d/%Y %I:%M:%S %p') 
>>> print(date_str) 
09/10/2015 06:17:09 PM 

# or, if you actually want the output format as %d/%m/%Y.... 
>>> print(date_obj.strftime('%d/%m/%Y %I:%M:%S %p')) 
10/09/2015 06:17:09 PM