Python-Datumszeichenfolge zum Datumsobjekt


345

Wie konvertiere ich eine Zeichenfolge 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.

Antworten:


586

Sie können strptimeim datetimePaket von Python verwenden:

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

Ich versuche einen ähnlichen Prozess, außer dass meine Eingabezeichenfolge nicht das Jahr hat, also sieht es aus wie '2405'. Standardmäßig wird das Jahr als angenommen 1900. Das Problem tritt auf, wenn das Februar-Datum wie '2902' analysiert wird. Ich bekomme diesen Fehler ValueError: day is out of range for month. Ich bin mir nicht sicher, wie ich das Standardjahr beim Parsen festlegen kann.
Shubham Naik

85
import datetime
datetime.datetime.strptime('24052010', '%d%m%Y').date()

59

Direkt verwandte Frage:

Was ist, wenn Sie haben

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

und du bekommst:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  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 du hast versucht:

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

aber Sie erhalten immer noch den Traceback oben.

Antworten:

>>> 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))

1
2015-07-20 09: 46: 55 + 00: 00 Ich habe diese Art von Daten. Wie erhalte ich ein Datumsobjekt?
Hardik Gajjar

Verwenden Sie das Modul re (regulärer Ausdruck), 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.
Schopenhauer

1
Vielen Dank, tatsächlich war das Problem ein Objekt vom Typ Diktat und ich bekomme nur eine Lösung mit dict.get mit
Hardik Gajjar

2
Eine andere Idee ist, das Handbuch docs.python.org/3/library/… zu lesen und zu beachten, dass% B für "Monat als vollständiger Name des Gebietsschemas" steht. Das ist wie "Januar" oder "Dezember", also wird "02" nicht analysiert.
Flip

1
Die Datumsformatzeichenfolge in dieser ist falsch, es sollte ein% m sein, kein% B
Ansager

24

Wenn Sie faul sind und nicht mit String-Literalen kämpfen möchten, können Sie einfach mit dem parserModul gehen.

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 Randnotiz , da wir versuchen, die anyZeichenfolgendarstellung abzugleichen, ist sie 10x langsamer alsstrptime


sehr einfache Lösung, danke. Ich habe versucht, ein langes Excel-Datum zu konvertieren, das alsMonday, June 03, 2019
Jeff Bluemel

5

Sie haben eine Datumszeichenfolge wie diese, "24052010", und Sie möchten ein Datumsobjekt dafür.

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

Dieses cus_date gibt Ihnen ein Datumsobjekt.

Mit dieser Option können Sie eine Datumszeichenfolge von Ihrem Datumsobjekt abrufen.

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

3

Es gibt eine andere Bibliothek, die arrowwirklich großartig ist, um Manipulationen am Python-Datum vorzunehmen.

import arrow
import datetime

a = arrow.get('24052010', 'DMYYYY').date()
print(isinstance(a, datetime.date)) # True

1

Verwenden Sie das Zeitmodul, um Daten zu konvertieren.

Code-Auszug:

import time 
tring='20150103040500'
var = int(time.mktime(time.strptime(tring, '%Y%m%d%H%M%S')))
print var
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.