510 Stimmen

Python-Datumszeichenfolge zum Datumsobjekt

Wie konvertiere ich einen String in ein Datumsobjekt in Python?

Der String wäre: "24052010" (entsprechend dem Format: "%d%m%Y")

Ich möchte kein datetime.datetime Objekt, sondern ein datetime.date Objekt.

807voto

SilentGhost Punkte 285785

Sie können strptime im datetime Paket von Python verwenden:

>>> import datetime
>>> datetime.datetime.strptime('24052010', "%d%m%Y").date()
datetime.date(2010, 5, 24)

0 Stimmen

Ich versuche einen ähnlichen Prozess, außer dass mein Eingabestring kein Jahr enthält, also sieht es aus wie '2405'. Standardmäßig wird das Jahr als 1900 genommen. Das Problem tritt auf, wenn ich ein Februar-Datum wie '2902' parsen möchte. Ich erhalte diesen Fehler ValueError: day is out of range for month. Ich bin mir nicht sicher, wie ich das Standardjahr beim Parsen setzen kann.

111voto

ThiefMaster Punkte 297146
import datetime
datetime.datetime.strptime('24052010', '%d%m%Y').date()

86voto

Schopenhauer Punkte 1012

Direkt zugehörige Frage:

Was passiert, wenn Sie Folgendes haben:

datetime.datetime.strptime("2015-02-24T13:00:00-08:00", "%Y-%B-%dT%H:%M:%S-%H:%M").date()

und Sie erhalten:

Traceback (most recent call last):
  File "", line 1, in 
  File "/usr/local/lib/python2.7/_strptime.py", line 308, in _strptime
    format_regex = _TimeRE_cache.compile(format)
  File "/usr/local/lib/python2.7/_strptime.py", line 265, in compile
    return re_compile(self.pattern(format), IGNORECASE)
  File "/usr/local/lib/python2.7/re.py", line 194, in compile
    return _compile(pattern, flags)
  File "/usr/local/lib/python2.7/re.py", line 251, in _compile
    raise error, v # invalid expression
sre_constants.error: redefinition of group name 'H' as group 7; was group 4

und Sie haben versucht:

<-24T13:00:00-08:00", "%Y-%B-%dT%HH:%MM:%SS-%HH:%MM").date()

aber Sie bekommen immer noch die oben stehende Fehlermeldung.

Antwort:

>>> from dateutil.parser import parse
>>> from datetime import datetime
>>> parse("2015-02-24T13:00:00-08:00")
datetime.datetime(2015, 2, 24, 13, 0, tzinfo=tzoffset(None, -28800))

3 Stimmen

2015-07-20 09:46:55+00:00 Ich habe diese Art von Daten, wie bekomme ich ein Datumsobjekt?

0 Stimmen

Verwenden Sie das re (Regular Expression) Modul, um Ihre Daten von "2015-07-20 09:46:55+00:00" in "2015-07-20T09:46:55-00:00" zu ändern. Verwenden Sie dann dateutil.parse, um ein Datumsobjekt zu erhalten.

2 Stimmen

Vielen Dank, das eigentliche Problem war ein Wörterbuch-Objekt und ich habe die Lösung einfach mit dict.get gefunden.

55voto

user1767754 Punkte 20816

Wenn Sie faul sind und sich nicht mit Zeichenfolgenliterale herumschlagen möchten, können Sie einfach das parser Modul verwenden.

from dateutil import parser
dt = parser.parse("Jun 1 2005  1:33PM")
print(dt.year, dt.month, dt.day,dt.hour, dt.minute, dt.second)
>2005 6 1 13 33 0

Nur eine kleine Anmerkung, da wir versuchen, beliebige Zeichenfolgen darzustellen, ist es 10x langsamer als strptime

2 Stimmen

Sehr einfache Lösung, danke. Ich habe versucht, ein Excel-Datum im langen Format umzuwandeln, das als Montag, 03. Juni 2019 angezeigt wurde.

12voto

Sie haben einen Datumsstring wie diesen: "24052010" und möchten ein Datumsobjekt dafür erstellen,

from datetime import datetime
cus_date = datetime.strptime("24052010", "%d%m%Y").date()

dieses cus_date wird Ihnen ein Datumsobjekt geben.

Sie können den Datumsstring von Ihrem Datumsobjekt mit diesem Code abrufen,

cus_date.strftime("%d%m%Y")

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X