2921 Stimmen

Konvertierung von String in Datetime

Wie konvertiere ich die folgende Zeichenfolge in ein Datetime-Objekt?

"Jun 1 2005  1:33PM"

1063voto

Simon Willison Punkte 14902

Verwenden Sie die dritte Partei dateutil Bibliothek:

from dateutil import parser
parser.parse("Aug 28 1999 12:00AM")  # datetime.datetime(1999, 8, 28, 0, 0)

Es kann die meisten Datumsformate verarbeiten, auch das, das Sie analysieren müssen. Es ist bequemer als strptime da es in den meisten Fällen das richtige Format erraten kann.

Es ist sehr nützlich für das Schreiben von Tests, bei denen die Lesbarkeit wichtiger ist als die Leistung.

Sie können es mit installieren:

pip install python-dateutil

515voto

florin Punkte 13628

Überprüfen Sie strptime im Zeit Modul. Es ist die Umkehrung von strftime .

$ python
>>> import time
>>> my_time = time.strptime('Jun 1 2005  1:33PM', '%b %d %Y %I:%M%p')
time.struct_time(tm_year=2005, tm_mon=6, tm_mday=1,
                 tm_hour=13, tm_min=33, tm_sec=0,
                 tm_wday=2, tm_yday=152, tm_isdst=-1)

timestamp = time.mktime(my_time)
# convert time object to datetime
from datetime import datetime
my_datetime = datetime.fromtimestamp(timestamp)
# convert time object to date
from datetime import date
my_date = date.fromtimestamp(timestamp)

271voto

SuperNova Punkte 20412

Python >= 3.7

zu konvertieren JJJJ-MM-TT String in ein Datetime-Objekt, datetime.fromisoformat verwendet werden könnte.

from datetime import datetime

date_string = "2012-12-12 10:10:10"
print (datetime.fromisoformat(date_string))
2012-12-12 10:10:10

133voto

Steve Peak Punkte 2597

Ich habe ein Projekt zusammengestellt, das einige wirklich tolle Ausdrücke konvertieren kann. Ausprobieren Timestring .

Nachstehend einige Beispiele:

pip install timestring

>>> import timestring
>>> timestring.Date('monday, aug 15th 2015 at 8:40 pm')
<timestring.Date 2015-08-15 20:40:00 4491909392>
>>> timestring.Date('monday, aug 15th 2015 at 8:40 pm').date
datetime.datetime(2015, 8, 15, 20, 40)
>>> timestring.Range('next week')
<timestring.Range From 03/10/14 00:00:00 to 03/03/14 00:00:00 4496004880>
>>> (timestring.Range('next week').start.date, timestring.Range('next week').end.date)
(datetime.datetime(2014, 3, 10, 0, 0), datetime.datetime(2014, 3, 14, 0, 0))

70voto

Rizwan Mumtaz Punkte 3685

Wenn Sie sich dies merken, brauchen Sie sich nicht mehr mit der Datumsumwandlung zu befassen.

String zu Datetime-Objekt = strptime

datetime-Objekt in andere Formate umwandeln = strftime

Jun 1 2005 1:33PM

ist gleichbedeutend mit

%b %d %Y %I:%M%p

%b Monat als abgekürzter Name des Gebietsschemas (Jun)

%d Tag des Monats als mit Nullen aufgefüllte Dezimalzahl(1)

%Y Jahr mit Jahrhundert als Dezimalzahl (2015)

%I Stunde (12-Stunden-Uhr) als mit Nullen aufgefüllte Dezimalzahl(01)

%M Minute als mit Nullen aufgefüllte Dezimalzahl(33)

%p Lokale Entsprechung von AM oder PM(PM)

Sie brauchen also strptime, d.h. eine Konvertierung string a

>>> dates = []
>>> dates.append('Jun 1 2005  1:33PM')
>>> dates.append('Aug 28 1999 12:00AM')
>>> from datetime import datetime
>>> for d in dates:
...     date = datetime.strptime(d, '%b %d %Y %I:%M%p')
...     print type(date)
...     print date
... 

Ausgabe

<type 'datetime.datetime'>
2005-06-01 13:33:00
<type 'datetime.datetime'>
1999-08-28 00:00:00

Wenn Sie andere Datumsformate haben, können Sie panda oder dateutil.parse verwenden.

>>> import dateutil
>>> dates = []
>>> dates.append('12 1 2017')
>>> dates.append('1 1 2017')
>>> dates.append('1 12 2017')
>>> dates.append('June 1 2017 1:30:00AM')
>>> [parser.parse(x) for x in dates]

OutPut

[datetime.datetime(2017, 12, 1, 0, 0), datetime.datetime(2017, 1, 1, 0, 0), datetime.datetime(2017, 1, 12, 0, 0), datetime.datetime(2017, 6, 1, 1, 30)]

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