Wie man einen String in ein Datums- oder Zeitobjekt in Python konvertiert

Einführung

Die Python-Module datetime und time enthalten beide eine Klasse strptime() zur Konvertierung von Zeichenfolgen in Objekte.

In diesem Artikel verwenden Sie strptime(), um Zeichenfolgen in datetime– und struct_time()-Objekte umzuwandeln.

Veröffentlichen Sie Ihre Python-Anwendungen von GitHub aus mit DigitalOcean App Platform. Lassen Sie DigitalOcean Ihre App skalieren.

Konvertieren einer Zeichenfolge in ein datetime-Objekt mit datetime.strptime()

Die Syntax für die Methode datetime.strptime() lautet:

datetime.strptime(date_string, format)

Die Methode datetime.strptime() gibt ein datetime-Objekt zurück, das der von date_string analysierten format entspricht. Beide Argumente sind erforderlich und müssen Zeichenfolgen sein.

Für Details zu den Formatanweisungen, die in datetime.strptime() verwendet werden, siehe strftime() und strptime() Formatcodes in der Python-Dokumentation.

Beispiel zur Konvertierung eines Strings in ein datetime.datetime()-Objekt

Das folgende Beispiel konvertiert einen Datum- und Zeitstring in ein datetime.datetime()-Objekt und gibt den Klassennamen sowie den Wert des resultierenden Objekts aus:

from datetime import datetime

datetime_str = '09/19/22 13:55:26'

datetime_object = datetime.strptime(datetime_str, '%m/%d/%y %H:%M:%S')

print(type(datetime_object))
print(datetime_object)  # im Standardformat ausgegeben

Die Ausgabe lautet:

<class 'datetime.datetime'>
2022-09-19 13:55:26

Beispiel zur Konvertierung eines Strings in ein datetime.date()-Objekt

Das folgende Beispiel konvertiert einen Datumsstring in ein datetime.date()-Objekt und gibt den Klassentyp sowie den Wert des resultierenden Objekts aus:

from datetime import datetime

date_str = '09-19-2022'

date_object = datetime.strptime(date_str, '%m-%d-%Y').date()
print(type(date_object))
print(date_object)  # im Standardformat ausgegeben

Die Ausgabe lautet:

<class 'datetime.date'>
2022-09-19

Beispiel zur Konvertierung eines Strings in ein datetime.time()-Objekt

Die folgende Beispiel konvertiert einen Zeit-String in ein datetime.time()-Objekt und gibt den Klassentyp sowie den Wert des resultierenden Objekts aus:

from datetime import datetime

time_str = '13::55::26'
time_object = datetime.strptime(time_str, '%H::%M::%S').time()
print(type(time_object))
print(time_object)

Die Ausgabe ist:

<class 'datetime.time'>
13:55:26

String in datetime.datetime()-Objekt mit Lokalisierungsbeispiel konvertieren

Das folgende Beispiel konvertiert einen deutschen Datums-String in ein datetime.datetime()-Objekt und gibt den Klassentyp sowie den Wert des resultierenden Objekts aus:

from datetime import datetime
import locale

locale.setlocale(locale.LC_ALL, 'de_DE')
date_str_de_DE = '16-Dezember-2022 Freitag'  # de_DE Lokalisierung
datetime_object = datetime.strptime(date_str_de_DE, '%d-%B-%Y %A')
print(type(datetime_object))
print(datetime_object)

Die Ausgabe ist:

<class 'datetime.datetime'>
2022-12-16 00:00:00

Beachten Sie, dass das resultierende Objekt den Wochentag aus dem Eingangsstring nicht enthält, da ein datetime.datetime()-Objekt den Wochentag nur als Dezimalzahl enthält.

String in ein struct_time()-Objekt mit time.strptime() konvertieren

Die Syntax für die time.strptime()-Methode lautet:

time.strptime(time_string[, format])

Die Methode time.strptime() gibt ein time.struct_time()-Objekt zurück, das dem von time_string analysierten Format entspricht. Der time_string ist erforderlich und beide Argumente müssen Zeichenketten sein. Wenn kein Format bereitgestellt wird, ist das Standardformat:

'%a %b %d %H:%M:%S %Y'

Dies entspricht dem Format, das von der Funktion ctime() zurückgegeben wird.

Die Formatanweisungen sind für time.strptime() und time.strftime() dieselben. Erfahren Sie mehr über die Formatanweisungen für das time-Modul in der Python-Dokumentation.

Beispiel zur Umwandlung einer Zeichenkette in ein struct_time()-Objekt mit bereitgestelltem Format

Im folgenden Beispiel wird eine Zeitzeichenkette in ein time.struct_time()-Objekt umgewandelt, indem das Format-Argument bereitgestellt wird, und der Wert des resultierenden Objekts wird ausgegeben:

import time

time_str = '11::33::54'
time_obj = time.strptime(time_str, '%H::%M::%S')
print("A time.struct_time object that uses the format provided:")
print(time_obj)

Die Ausgabe ist:

A time.struct_time object that uses the format provided:
time.struct_time(tm_year=1900, tm_mon=1, tm_mday=1,
tm_hour=11, tm_min=33, tm_sec=54, tm_wday=0, tm_yday=1,
tm_isdst=-1)

Wie aus der Ausgabe ersichtlich ist, verwendet die Methode strptime() Platzhalterwerte für alle Formatanweisungen, die nicht im Format-Argument definiert sind, wenn Sie eine Zeichenkette in ein time.struct_time()-Objekt umwandeln.

String in struct_time()-Objekt mit Standardformat umwandeln Beispiel

Wenn Sie kein Format-Argument angeben, wenn Sie einen Zeitstring in ein time.struct_time()-Objekt umwandeln, wird das Standardformat verwendet und es tritt ein Fehler auf, wenn der Eingabestring nicht genau dem Standardformat entspricht:

 '%a %b %d %H:%M:%S %Y'

Im folgenden Beispiel wird ein Zeitstring ohne Format-Argument in ein time.struct_time()-Objekt umgewandelt und der Wert des resultierenden Objekts wird ausgegeben:

import time

# Standardformat - "%a %b %d %H:%M:%S %Y"
time_str_default = 'Mon Dec 12 14:55:02 2022'
time_obj_default = time.strptime(time_str_default)
print("A time.struct_time object that uses the default format:")
print(time_obj_default)

Die Ausgabe lautet:

A time.struct_time object that uses the default format:
time.struct_time(tm_year=2022, tm_mon=12, tm_mday=12,
tm_hour=14, tm_min=55, tm_sec=2, tm_wday=0, tm_yday=346,
tm_isdst=-1)

Wie aus der Ausgabe ersichtlich ist, verwendet die strptime()-Methode beim Umwandeln eines Strings in ein time.struct_time()-Objekt Platzhalterwerte für alle Formatdirektiven, die nicht im Format-Argument definiert sind oder durch das Standardformat, wenn kein Format angegeben wird.

Fehlerbehebung bei strptime()-Fehlern

Wenn der Eingabestring nicht mit dem bereitgestellten Format von `strptime()` analysiert werden kann, wird ein `ValueError` ausgelöst. Sie können den `try`-Block verwenden, um auf Analysefehler zu testen, zusammen mit dem `except`-Block, um die Ergebnisse auszugeben. Die `ValueError`-Meldungen, die Sie erhalten, wenn Sie die Methode `strptime()` verwenden, erklären deutlich die Ursachen der Analysefehler. Das folgende Beispiel demonstriert einige häufige Fehler, wie zusätzliche Daten und eine Formatinkompatibilität:

from datetime import datetime
import time

datetime_str = '09/19/18 13:55:26'

try:
    datetime_object = datetime.strptime(datetime_str, '%m/%d/%y')
except ValueError as ve1:
    print('ValueError 1:', ve1)

time_str = '99::55::26'

try:
    time_object = time.strptime(time_str, '%H::%M::%S')
except ValueError as ve2:
    print('ValueError 2:', ve2)

Die Ausgabe ist:

ValueError 1: unconverted data remains:  13:55:26
ValueError 2: time data '99::55::26' does not match format '%H::%M::%S'

Schlussfolgerung

In diesem Tutorial haben Sie Datum- und Zeitstrings in `datetime`- und `time`-Objekte mit Python konvertiert. Setzen Sie Ihr Lernen mit weiteren Python-Tutorials fort.

Source:
https://www.digitalocean.com/community/tutorials/python-string-to-datetime-strptime