2017-08-29 10 views
-1

Ich habe eine Zeichenfolge wie 23 July 1914 und möchte es in 23/07/1914 Datumsformat konvertieren. Aber mein Code gibt error.Wie konvertiert man einen String in das Datumsformat in Python?

from datetime import datetime 
datetime_object = datetime.strptime('1 June 2005','%d %m %Y') 
print datetime_object 
+3

Pythons Fehler sind explizit (obwohl Python 3 eine große Verbesserung in diesem Punkt war). Nehmen Sie sich etwas Zeit, um den Fehler sorgfältig zu lesen: Er sollte deutlich aufzeigen, was falsch ist. Zumindest sollten Sie diesen Fehler mit uns teilen. –

Antwort

2

Hier ist, was Sie tun sollten:

from datetime import datetime 
datetime_object = datetime.strptime('1 June 2005','%d %B %Y') 
s = datetime_object.strftime("%d/%m/%y") 
print(s) 

Ausgang:

>>> 01/06/05 

Sie sehen Ihre strptime zwei Parameter erfordert.

strptime(string[, format]) 

Und die Zeichenfolge wird nach einem Format in ein datetime Objekt umgewandelt werden Sie angeben.

Es gibt verschiedene Formate

%a - abbreviated weekday name %A - full weekday name %b - abbreviated month name %B - full month name %c - preferred date and time representation %C - century number (the year divided by 100, range 00 to 99) %d - day of the month (01 to 31) %D - same as %m/%d/%y %e - day of the month (1 to 31) %g - like %G, but without the century %G - 4-digit year corresponding to the ISO week number (see %V). %h - same as %b %H - hour, using a 24-hour clock (00 to 23)

Die oben einige Beispiele sind. Hier finden Sie formats

Werfen Sie einen Blick auf diese beiden!

%b - abbreviated month name %B - full month name

Es sollte in einem ähnlichen Muster zu der Zeichenfolge, die Sie bereitstellen. Verwirrend werfen Sie einen Blick auf diese Beispiele.

>>> datetime.strptime('1 jul 2009','%d %b %Y') 
datetime.datetime(2009, 7, 1, 0, 0) 
>>> datetime.strptime('1 Jul 2009','%d %b %Y') 
datetime.datetime(2009, 7, 1, 0, 0) 
>>> datetime.strptime('jul 21 1996','%b %d %Y') 
datetime.datetime(1996, 7, 21, 0, 0) 

Wie Sie sehen können, basierend auf dem Format wird die Zeichenfolge in ein Datetime-Objekt umgewandelt. Jetzt schau!

>>> datetime.strptime('1 July 2009','%d %b %Y') 
Traceback (most recent call last): 
    File "<pyshell#12>", line 1, in <module> 
    datetime.strptime('1 July 2009','%d %b %Y') 
    File "/usr/lib/python3.5/_strptime.py", line 510, in _strptime_datetime 
    tt, fraction = _strptime(data_string, format) 
    File "/usr/lib/python3.5/_strptime.py", line 343, in _strptime 
    (data_string, format)) 
ValueError: time data '1 July 2009' does not match format '%d %b %Y' 

Warum Fehler, da jun oder Jun (Kurzform) für %b steht. Wenn Sie eine June liefern, wird es verwirrt. Was ist jetzt zu tun? Das Format wurde geändert.

>>> datetime.strptime('1 July 2009','%d %B %Y') 
datetime.datetime(2009, 7, 1, 0, 0) 

Einfach jetzt konvertieren das Datetime-Objekt ist einfach genug.

>>> s = datetime.strptime('1 July 2009','%d %B %Y') 
>>> s.strftime('%d/%m/%Y') 
'01/07/2009 

Auch die %m ist das Format für sie in Monaten Anzeige (Zahlen) um mehr über sie zu lesen.

6

Ihr Fehler ist in dem Format, das Sie verwenden, um Ihre Zeichenfolge zu entfernen. Sie verwenden %m als Formatbezeichner für Monat, aber dies erwartet eine gefüllte Ganzzahl 0, die den Monat des Jahres darstellt (z. B. 06 für Ihr Beispiel). Was Sie verwenden möchten, ist %B, die einen Monat des Jahres vollständig ausgeschrieben erwartet (z. B. June in Ihrem Beispiel).

Für eine vollständige Erklärung der Formatbezeichner datetime konsultieren Sie bitte the documentation, und wenn Sie irgendwelche anderen Probleme haben, überprüfen Sie bitte dort zuerst.

0

Die placeholder für "Monat als vollständiger Name des Gebietsschemas." wäre %B nicht %m:

>>> from datetime import datetime 
>>> datetime_object = datetime.strptime('1 June 2005','%d %B %Y') 
>>> print(datetime_object) 
2005-06-01 00:00:00 

>>> print(datetime_object.strftime("%d/%m/%Y")) 
01/06/2005 
0

Diese Arbeit sollte:

from datetime import datetime 
print(datetime.strptime('1 June 2005', '%d %B %Y').strftime('%d/%m/%Y')) 
print(datetime.strptime('23 July 1914', '%d %B %Y').strftime('%d/%m/%Y')) 

Für weitere Informationen können Sie sich über strftime-strptime-behavior

0

%d bedeutet „Tag des Monats als Nullen aufgefüllt Dezimalzahl gelesen . "

%m bedeutet "Monat als Null gefüllte Dezimalzahl."

Weder Tag noch Monat werden geliefert, was Sie sagen, es zu erwarten. Was Sie brauchen %B für Monat (nur wenn Ihr Standort ist en_US) und %-d für den Tag.

Verwandte Themen