Python: Datum und String konvertieren – strptime & strftime

目次

1. Grundkenntnisse, die Sie vor der Handhabung von Datum und Strings in Python kennen sollten

Beim Verarbeiten von Datum und Zeit in Python ist das grundlegendste das Modul „datetime“. In diesem Artikel erklären wir detailliert, wie man Datum und Strings gegenseitig konvertiert, aber zuerst lassen Sie uns die grundlegenden Konzepte und Klassen, die Sie kennen sollten, zusammenfassen.

Was ist die Standardbibliothek datetime von Python?

In Python ist als Standardbibliothek für die Handhabung von Datum und Zeit das Modul datetime verfügbar. Es erfordert keine zusätzliche Installation und kann sofort verwendet werden. Mit diesem Modul können Sie eine Vielzahl von Operationen durchführen, wie das Abrufen der aktuellen Uhrzeit, das Addieren und Subtrahieren von Daten, Formatkonvertierungen und Vergleiche. Zuerst überprüfen wir die grundlegende Importmethode.
import datetime
Oder Sie können wie folgt nur die benötigten Klassen importieren.
from datetime import datetime, date, time, timedelta

Häufig verwendete Klassen und ihre Unterschiede

Das datetime-Modul enthält mehrere Klassen, aber diejenigen, die eng mit der Konvertierung von Datum und Strings zusammenhängen, sind hauptsächlich die folgenden drei.

datetime.date-Klasse

Diese Klasse repräsentiert Informationen zu „Jahr, Monat, Tag“. Sie enthält keine Zeitinformationen.
d = datetime.date(2025, 4, 7)
print(d)  # Ausgabe: 2025-04-07

datetime.time-Klasse

Diese Klasse enthält nur Zeitinformationen wie „Stunde, Minute, Sekunde“. Sie enthält keine Datumsangaben.
t = datetime.time(14, 30, 0)
print(t)  # Ausgabe: 14:30:00

datetime.datetime-Klasse

Diese Klasse ist die vielseitigste und kann sowohl Datum (Jahr, Monat, Tag) als auch Zeit (Stunde, Minute, Sekunde) handhaben.
dt = datetime.datetime(2025, 4, 7, 14, 30)
print(dt)  # Ausgabe: 2025-04-07 14:30:00
Diese Klasse wird bei der gegenseitigen Konvertierung von Strings und Datum am häufigsten verwendet.

Aktuelles Datum und Uhrzeit mit datetime.now() abrufen

Mit der now()-Methode der datetime.datetime-Klasse können Sie die aktuelle Datum und Uhrzeit einfach abrufen.
from datetime import datetime

now = datetime.now()
print(now)  # Beispiel: 2025-04-07 13:45:12.345678
Das so abgerufene datetime-Objekt kann mit strftime() oder strptime(), die später vorgestellt werden, in einen String konvertiert oder aus einem String generiert werden.

Zusammenfassung

In diesem Abschnitt haben wir einen Überblick über das datetime-Modul gegeben, das für die Handhabung von Datum und Zeit in Python am grundlegendsten ist, und die Unterschiede zwischen den repräsentativen Klassen erklärt. Im nächsten Abschnitt konzentrieren wir uns auf die „Konvertierung von String zu Datum“ und stellen die konkrete Verwendung von strptime() vor.

2. [Zeichenkette → Datum] Methode zum Erstellen eines Datumsobjekts mit strptime()

In Python verwenden Sie die Methode strptime(), um eine Zeichenkette, die ein Datum darstellt, in ein datetime-Objekt umzuwandeln. Dies ist eine Abkürzung für „string parse time“ und eine Funktion, die die Zeichenkette analysiert und als Datum interpretiert. In diesem Kapitel erklären wir schrittweise von der grundlegenden Verwendung über die Handhabung japanischer Datumsdarstellungen bis hin zu Fehlbehandlungen.

Grundlegende Verwendung von strptime() und Liste der Formatangaben

Grundlegende Syntax

from datetime import datetime\n\n date_string = '2025-04-07'\n dt = datetime.strptime(date_string, '%Y-%m-%d')\n print(dt)  # Ausgabe: 2025-04-07 00:00:00
strptime() nimmt zwei Argumente wie folgt:
  • Erstes Argument: Die zu parsende Zeichenkette (z. B. ‚2025-04-07‘)
  • Zweites Argument: Das Format der Zeichenkette (z. B. ‚%Y-%m-%d‘)

Häufig verwendete Formatangaben

DirektiveBedeutungBeispiel
%YJahr (4-stellig)2025
%yJahr (2-stellig)25
%mMonat (2-stellig)04
%dTag (2-stellig)07
%HStunde (24-Stunden-Format)14
%MMinute30
%SSekunde59
%AWochentag (Englisch)Monday
%pVormittag/Nachmittag (AM/PM)AM

Ein weiteres Beispiel: Konvertierung mit Datum und Uhrzeit

date_string = '2025-04-07 14:30:00'\n dt = datetime.strptime(date_string, '%Y-%m-%d %H:%M:%S')\n print(dt)  # Ausgabe: 2025-04-07 14:30:00

Wie handhabt man Datumszeichenkette in japanischer Notation?

Um gängige japanische Formate wie „2025-04-07“ oder „2025-04-07 (Mo)“ zu handhaben, passen Sie das Format wie folgt an.

Beispiel zum Parsen einer Zeichenkette mit japanischem Jahr, Monat, Tag

date_string = '2025-04-07'\n dt = datetime.strptime(date_string, '%Y-%m-%d')\n print(dt)  # Ausgabe: 2025-04-07 00:00:00

Zeichenketten mit japanischen Wochentagen können mit dem basischen strptime() nicht verarbeitet werden

Zum Beispiel führt eine Zeichenkette wie „2025-04-07 (Mo)“ zu einem Fehler mit strptime() allein, da Pythons strptime() lokalisierungsabhängig ist und japanische Wochentage standardmäßig nicht unterstützt. In diesem Fall gibt es folgende Lösungsansätze:
  • Entfernen Sie den unnötigen japanischen Wochentag aus der Zeichenkette und übergeben Sie sie dann an strptime()
  • Nutzen Sie externe Bibliotheken (z. B. kanji_to_time usw.)

Häufige Fehler und deren Behebung: ValueError

Der häufigste Fehler beim Einsatz von strptime() ist der folgende.
ValueError: time data '2025/04/07' does not match format '%Y-%m-%d'

Was ist die Ursache dieses Fehlers?

Dies tritt auf, weil das tatsächliche Format der Zeichenkette nicht mit dem angegebenen Format übereinstimmt. Zum Beispiel, um ein Datum wie '2025/04/07' zu verarbeiten, müssen Sie das Format entsprechend an die Schrägstriche anpassen.
date_string = '2025/04/07'\n dt = datetime.strptime(date_string, '%Y/%m/%d')

Tipps zur Fehlerbehebung

  • Überprüfen Sie die Trennzeichen (-, /, Leerzeichen usw.)
  • Prüfen Sie, ob Nullauffüllung vorhanden ist (z. B. ’04‘ vs. ‚4‘)
  • Stellen Sie sicher, dass keine überflüssigen Informationen enthalten sind, die strptime() nicht verarbeiten kann, wie Wochentage
年収訴求

3. [Datum → String] Methode zur freien Formatkonvertierung mit strftime()

Beim Umgang mit Datumsangaben in Python gibt es sehr viele Situationen, in denen man ein datetime-Objekt in einen String in einem bestimmten Format umwandeln möchte. In solchen Fällen ist die strftime()-Methode sehr nützlich. In diesem Kapitel erklären wir die grundlegende Verwendung von strftime(), gängige Format‑Spezifizierer und die Methode, um Wochentage und Monatsnamen auf Japanisch anzuzeigen.

Grundlegende Verwendung von strftime()

Syntax und einfaches Beispiel

from datetime import datetime


dt = datetime(2025, 4, 7, 14, 30)
formatted = dt.strftime('%Y-%m-%d %H:%M:%S')
print(formatted)  # Ausgabe: 2025-04-07 14:30:00
strftime() ist eine Abkürzung für „string format time“ und konvertiert ein datetime-Objekt in einen String im angegebenen Format.

Gängige Format‑Spezifizierer (Wiedergabe)

SpezifiziererBedeutungBeispiel
%YGregorianisches Jahr (4 Stellen)2025
%mMonat (2 Stellen)04
%dTag (2 Stellen)07
%HStunde (24‑Stunden‑Format)14
%MMinute30
%SSekunde00
%AWochentag (Englisch)Monday
%aWochentag (Abkürzung)Mon
%pVormittag/Nachmittag (AM/PM)PM

Praktisches Beispiel: Format frei anpassen

Jahr, Monat und Tag mit Schrägstrich trennen

dt = datetime(2025, 4, 7)
formatted = dt.strftime('%Y/%m/%d')
print(formatted)  # Ausgabe: 2025/04/07

In japanischem Format konvertieren

dt = datetime(2025, 4, 7)
formatted = dt.strftime('%Y-%m-%d')
print(formatted)  # Ausgabe: 2025-04-07

Detaillierte Anzeige mit Uhrzeit

dt = datetime(2025, 4, 7, 14, 30)
formatted = dt.strftime('%Y-%m-%d %H:%M')
print(formatted)  # Ausgabe: 2025-04-07 14:30

Falls japanische Wochentage angezeigt werden sollen

Mit strftime('%A') kann der Wochentag angezeigt werden, standardmäßig jedoch auf Englisch. Um ihn auf Japanisch anzuzeigen, muss die Locale (Spracheinstellung) geändert werden.

Beispiel mit dem locale‑Modul (für UNIX/Linux‑Umgebungen)

import locale
from datetime import datetime

locale.setlocale(locale.LC_TIME, 'ja_JP.UTF-8')
dt = datetime(2025, 4, 7)
formatted = dt.strftime('%Y-%m-%d (%A)')
print(formatted)  # Ausgabe: 2025-04-07 (Montag)

Hinweise

  • In Windows‑Umgebungen ist 'ja_JP.UTF-8' möglicherweise nicht verfügbar.
  • Aufgrund der Umgebungsabhängigkeit sollte in Web‑Apps oder verteiltem Code Hardcoding vermieden werden.
  • Für mehr Stabilität kann der Wochentag auch manuell mit einem Dictionary zugeordnet werden.
weekdays = ['Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa', 'So']
weekday = weekdays[dt.weekday()]
print(f"{dt.strftime('%Y-%m-%d')} ({weekday})")

Zusammenfassung

In diesem Kapitel haben wir die Verwendung von strftime() und praktische Beispiele zur Konvertierung eines datetime-Objekts in einen String vorgestellt. Die Möglichkeit, das Ausgabeformat frei anzupassen, ist in vielen Szenarien wie der Visualisierung von Datumdaten oder der Protokollierung sehr nützlich. Im nächsten Kapitel erklären wir die gegenseitige Konvertierung mit dem standardisierten Datumsformat „ISO 8601“.

4. Techniken zur gegenseitigen Umwandlung mit dem ISO-8601-Format

Bei der Datenverknüpfung zwischen Systemen oder API-Kommunikation ist es üblich, Datum und Uhrzeit im „ISO-8601-Format“ auszutauschen. In Python ist die Umwandlung in dieses Format eine der sehr wichtigen Operationen. In diesem Kapitel erklären wir die Methoden zur gegenseitigen Umwandlung des ISO-8601-Formats in Python sowie die Handhabung von Strings mit Zeitzoneninformationen.

Was ist das ISO-8601-Format?

Das ISO-8601-Format ist die von der Internationalen Organisation für Normung (ISO) festgelegte Regelung für die Darstellung von Datum und Uhrzeit. Es wird in einer Form wie der folgenden dargestellt:
2025-04-07T14:30:00
  • Zwischen Datum und Uhrzeit wird „T“ eingefügt
  • 24-Stunden-Format
  • Zeitzoneninformationen (z. B. +09:00 oder Z) können angehängt sein
Dieses Format wird weit verbreitet in Datenformaten wie JSON oder XML, REST-APIs, Logdateien usw. verwendet.

isoformat() für die Konvertierung von Datum zu ISO-Format-String

Das datetime-Objekt in Python verfügt über eine bequeme Methode namens isoformat().

Beispiel zur Verwendung

from datetime import datetime

 dt = datetime(2025, 4, 7, 14, 30)
 iso_str = dt.isoformat()
 print(iso_str)  # Ausgabe: 2025-04-07T14:30:00

Feinabstimmung mit Argumenten ist möglich

# Anzeige bis Millisekunden
 print(dt.isoformat(timespec='milliseconds'))  # 2025-04-07T14:30:00.000

 # Nur Datum abrufen
 print(dt.date().isoformat())  # 2025-04-07

fromisoformat() für die Konvertierung von ISO-Format zu datetime-Objekt

Umgekehrt wird zur Erstellung eines datetime-Objekts aus einem ISO-8601-Format-String fromisoformat() verwendet.

Beispiel zur Verwendung

iso_str = '2025-04-07T14:30:00'
 dt = datetime.fromisoformat(iso_str)
 print(dt)  # Ausgabe: 2025-04-07 14:30:00
Es ist sehr intuitiv und wird seit Python 3.7 unterstützt.

Methoden zur Handhabung von ISO-Strings mit Zeitzoneninformationen

Die Standard-fromisoformat() kann Fälle mit Zeitzoneninformationen (z. B. +09:00 oder Z) nicht immer richtig verarbeiten. In solchen Fällen kann die Verwendung einer Drittanbieter-Bibliothek flexibler sein.

Empfohlene Bibliothek: dateutil.parser

pip install python-dateutil

Beispiel zur Verwendung

from dateutil import parser

 iso_str = '2025-04-07T14:30:00+09:00'
 dt = parser.parse(iso_str)
 print(dt)  # Ausgabe: 2025-04-07 14:30:00+09:00
Auf diese Weise können ISO-Strings mit Zeitzone genau geparst werden.

Zusatz: Unterschiede zwischen UTC und Z-Notation

  • Z ist eine Abkürzung für „Zulu Time (UTC)“.
  • 2025-04-07T14:30:00Z stellt die Zeit in UTC (Koordinierter Weltzeit) dar.
Da die Standard-fromisoformat() in Python die Z-Notation nicht unterstützt, wird die Verwendung von dateutil.parser empfohlen.

Zusammenfassung

Das ISO-8601-Format ist unverzichtbar für den Datenaustausch von Datum und Uhrzeit. In Python können Konvertierungen einfach mit isoformat() und fromisoformat() durchgeführt werden, aber für Strings mit Zeitzone ist die Verwendung der externen Bibliothek dateutil sehr effektiv. Im nächsten Kapitel werden anwendungsbezogene fortgeschrittene Techniken wie Berechnungen, Vergleiche und Differenzen von Daten eingeführt.
年収訴求

5. Nützliche Techniken zum Umgang mit Datumsangaben

Beim Umgang mit Datum und Uhrzeit werden nicht nur Formatkonvertierungen verwendet, sondern auch häufig Prozesse wie der Vergleich von Datumsangaben oder das Addieren und Subtrahieren von Datumsangaben. In diesem Kapitel erklären wir zentrale Techniken aus dem datetime-Modul, die in der Praxis nützlich sind.

timedelta zum Addieren und Subtrahieren von Datumsangaben verwenden

Um Datumsangaben wie „einen Tag später“, „eine Woche früher“ oder „30 Tage später“ zu berechnen, verwendet man die Klasse datetime.timedelta.

Einen Tag später und einen Tag früher ermitteln

from datetime import datetime, timedelta

today = datetime(2025, 4, 7)
tomorrow = today + timedelta(days=1)
yesterday = today - timedelta(days=1)

print(tomorrow)   # Ausgabe: 2025-04-08 00:00:00
print(yesterday)  # Ausgabe: 2025-04-06 00:00:00

Addition und Subtraktion in Stunden-Einheiten ist ebenfalls möglich

dt = datetime(2025, 4, 7, 14, 30)
plus_2_hours = dt + timedelta(hours=2)

print(plus_2_hours)  # Ausgabe: 2025-04-07 16:30:00

Datumsangaben für heute, gestern und morgen abrufen

Das Abrufen relativer Datumsangaben basierend auf dem aktuellen Datum und der Uhrzeit ist ebenfalls sehr üblich.
from datetime import datetime, timedelta

now = datetime.now()
today = now.date()
yesterday = today - timedelta(days=1)
tomorrow = today + timedelta(days=1)

print(f"Heute: {today}")
print(f"Gestern: {yesterday}")
print(f"Morgen: {tomorrow}")
Damit können Funktionen wie Tagesberichte oder Scheduler einfach implementiert werden.

Vergleich von Datumsangaben und Berechnung der Differenz (Tage)

Es ist auch möglich, die Reihenfolge von zwei Datumsangaben zu vergleichen oder die Differenz (in Tagen, Stunden usw.) zu berechnen.

Vergleich von Datumsangaben (Größenverhältnis)

d1 = datetime(2025, 4, 7)
d2 = datetime(2025, 4, 10)

print(d1 < d2)  # Ausgabe: True

Differenz berechnen (Nutzung von timedelta)

delta = d2 - d1
print(delta.days)  # Ausgabe: 3
Auf diese Weise wird die Differenz als timedelta-Objekt erhalten, und detaillierte Werte können über Attribute wie .days oder .seconds abgerufen werden.

Methode zum Abrufen und Überprüfen eines bestimmten Wochentags

Um den Wochentag eines Datums abzurufen oder zu überprüfen, ob es sich um einen bestimmten Wochentag handelt, verwendet man .weekday() oder .isoweekday().
MethodeAusgabe (Beispiel: Montag)
.weekday()0 (= Montag)
.isoweekday()1 (= Montag)
d = datetime(2025, 4, 7)  # Montag

print(d.weekday())     # Ausgabe: 0
print(d.isoweekday())  # Ausgabe: 1

Methode zum Anzeigen des Wochentags auf Deutsch (Mapping mit einem Dictionary)

weekdays = ['Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag', 'Sonntag']
weekday_de = weekdays[d.weekday()]
print(f"{d.strftime('%Y/%m/%d')} ({weekday_de})")

Überprüfung auf Schaltjahr und automatische Berechnung des Monatsendes (Zusatz)

import calendar

# Überprüfung, ob Schaltjahr
print(calendar.isleap(2024))  # Ausgabe: True

# Monatsend-Datum abrufen
last_day = calendar.monthrange(2025, 4)[1]
print(last_day)  # Ausgabe: 30

Zusammenfassung

In diesem Kapitel haben wir Methoden zur Addition und Subtraktion von Datumsangaben, zum Vergleich, zur Berechnung von Differenzen und zur Bestimmung des Wochentags vorgestellt, die in der Praxis häufig vorkommen. Insbesondere die Verwendung von timedelta ist sehr vielseitig und sollte als grundlegende Fähigkeit im Umgang mit Datumsangaben im Gedächtnis behalten werden. Im nächsten Kapitel fassen wir häufig gestellte Fragen (FAQ) zu den bisher erläuterten Inhalten zusammen und bieten Informationen, die beim Klären von Zweifeln hilfreich sind.

6. Häufig gestellte Fragen (FAQ)

Beim Umgang mit Datum und Strings in Python, insbesondere Punkte, an denen Anfänger leicht stolpern, haben wir in Form von häufig gestellten Fragen zusammengefasst. Nutzen Sie dies zur Fehlerbehebung und zur Vertiefung des Verständnisses.

Q1. Warum tritt ein ValueError bei strptime() auf?

A. Wahrscheinlich passt das Format nicht.

Bei strptime() führt bereits eine Abweichung von einem Zeichen zwischen String und angegebenem Format zu einem Fehler. Beispiel: Falscher Fall
from datetime import datetime

 date_string = '2025/04/07'
# Das Format ist „-“ und passt nicht
 dt = datetime.strptime(date_string, '%Y-%m-%d')
# → ValueError tritt auf
Korrekturbeispiel:
dt = datetime.strptime(date_string, '%Y/%m/%d')
Andere mögliche Ursachen sind:
  • Das Vorhandensein von führenden Nullen (04 und 4 usw.)
  • Überflüssige Zeichen (z. B. Wochentag oder Leerzeichen)
  • Nicht unterstützte Formate (z. B. japanische „Vormittag/Nachmittag“)

Q2. Warum wird der japanische Wochentag nicht angezeigt, sondern Englisch?

A. strftime('%A') hängt vom Lokalisierungseinstellung (Spracheinstellung) ab.

In der Standardeinstellung von Python wird Englisch verwendet, daher werden Wochentage mit %A wie Monday abgerufen.

Lösung 1: Das locale-Modul verwenden (UNIX/Linux-Systeme)

import locale
 from datetime import datetime

 locale.setlocale(locale.LC_TIME, 'ja_JP.UTF-8')
 dt = datetime(2025, 4, 7)
 print(dt.strftime('%A'))  # Ausgabe: Montag

Lösung 2: Wochentage mit einem Dictionary auf Japanisch mappen (unabhängig von der Umgebung)

weekdays = ['Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag', 'Sonntag']
 print(weekdays[dt.weekday()])  # Ausgabe: Montag

Q3. Kann ich japanische Daten mit „Vormittag“ „Nachmittag“ konvertieren?

A. Die Standard-strptime() von Python unterstützt das nicht.

Zum Beispiel führt ein String wie '2025年4月7日 午後2時30分' zu einem Fehler mit der Standard-strptime().

Behandlungsmethode:

  • Selbst mit regulären Ausdrücken „Vormittag/Nachmittag“ in Uhrzeiten umwandeln
  • Externe Bibliothek verwenden (z. B. dateparser)
pip install dateparser
import dateparser

 s = '2025年4月7日 午後2時30分'
 dt = dateparser.parse(s)
 print(dt)  # Ausgabe: 2025-04-07 14:30:00

Q4. Was ist der Unterschied zwischen datetime.now() und datetime.today()?

A. Im Wesentlichen dasselbe (datetime.datetime).

from datetime import datetime

 print(datetime.now())     # Aktuelles Datum und Uhrzeit abrufen
 print(datetime.today())   # Ebenso aktuelles Datum und Uhrzeit abrufen
Beide geben die aktuelle lokale Uhrzeit zurück. Es gibt strenge Unterschiede in der Python-Dokumentation, aber für übliche Anwendungen können Sie dasselbe Verhalten annehmen.

Q5. Ich kann ISO-Strings mit Zeitzone nicht konvertieren. Was tun?

A. datetime.fromisoformat() unterstützt einige Strings mit Zeitzone nicht.

Beispiel: 2025-04-07T14:30:00+09:00 usw.

Lösung: dateutil.parser.parse() verwenden

from dateutil import parser

 s = '2025-04-07T14:30:00+09:00'
 dt = parser.parse(s)
 print(dt)  # Ausgabe: 2025-04-07 14:30:00+09:00
Mit der dateutil-Bibliothek können Sie flexibel mit Strings mit Zeitzone umgehen.

Ergänzung: Was tun, wenn die japanische Lokalisierung unter Windows nicht richtig funktioniert?

Wenn locale.setlocale(locale.LC_TIME, 'ja_JP.UTF-8') nicht funktioniert, ist der Lokalisierungsname unter Windows wie Japanese_Japan.932.
locale.setlocale(locale.LC_TIME, 'Japanese_Japan.932')
Allerdings gibt es Umgebungsunterschiede, daher ist die Dictionary-Mapping-Methode sicherer.

Zusammenfassung

Im FAQ haben wir häufige Fehler und verwirrende Punkte mit konkreten Beispielen erklärt. Wenn Sie diese Zweifel klären können, sollten Sie beim Umgang mit Datum und Strings in Python erheblich selbstbewusster sein.
RUNTEQ(ランテック)|超実戦型エンジニア育成スクール