Analysieren Sie das ISO 8601-Datum in Python

Olorunfemi Akinlua 21 Juni 2023
  1. Aufbau des ISO 8601 Datums
  2. Verwenden Sie strptime() und strtime(), um das ISO 8601-Datum in Python zu parsen
  3. Verwenden Sie fromisoformat(), um das ISO 8601-Datum in Python zu parsen
  4. Verwenden Sie dateutil, um das ISO 8601-Datum in Python zu parsen
Analysieren Sie das ISO 8601-Datum in Python

Daten sind für alle wichtig und für viele Anwendungen, die wir verwenden, von entscheidender Bedeutung. Als Entwickler kann es ein wenig verwirrend sein, mit den verschiedenen Zeitzonen oder Zeitobjekten, die existieren, und der Arbeit um sie herum zu arbeiten.

Allerdings gibt es oft Standards, die die Arbeit erleichtern, und darum geht es in diesem Artikel. Darüber hinaus besprechen wir die Struktur eines typischen ISO 8601-Datums und zeigen Ihnen, wie Sie typische DateTime-Objekte in die standardisierte DateTime parsen, die überall verwendet werden kann.

Aufbau des ISO 8601 Datums

Die ISO (International Organization for Standardization) arbeitet an der Schaffung von Standardisierung für ihre Mitgliedsländer in verschiedenen Bereichen, die häufig technische und nicht-technische Bereiche umfassen. Bereiche wie Engineering gehören zu ihren Schwerpunkten.

Zu den zahlreichen Standardisierungen gehört die ISO 8601 DateTime, dargestellt durch Monat, Tag, Stunde, Minuten, Sekunden und Millisekunden. Es wird weltweit als DateTime-Standard für alle Daten verwendet und ist zeitbasiert, was dazu beiträgt, falsche Darstellungen und Fehler zu vermeiden.

Wenn Sie eine Python-Anwendung erstellen, die weltweit verwendet wird, ist es wichtig, das ISO 8601-DateTime-Objekt zu verstehen, und es kann eine Anforderung sein.

Die ISO 8601 datetime wird mit dem Jahr links beginnend dargestellt und endet mit einem Millisekunden-Parameter und wird oft mit anderen Computerzeichen von T bis Z kombiniert.

2022-08-10 17:00:00.000

Das obige ISO-DateTime-Objekt repräsentiert den 11. August im Jahr 2022 um 17:00 Uhr. innerhalb der lokalen Zeitzone.

Es ist wichtig, anzugeben, dass die DateTime-Zeichenfolge ISO 8601 den Datumsabschnitt erfordert, der Zeitabschnitt jedoch optional ist. Sie sind verschiedene Varianten von ISO 8601, aber das Obige wäre die Referenz dieses Artikels.

Verwenden Sie strptime() und strtime(), um das ISO 8601-Datum in Python zu parsen

Python ist mit verschiedenen Modulen vorinstalliert, die für verschiedene Operationen nützlich sind, und eines dieser vorinstallierten Module ist datetime, das bei Datums- und Zeitoperationen hilft. Mit dem datetime-Modul können Sie datetime(year, month, day[, hour[, minute[, second[, microsecond[, microsecond[,tzinfo]]]]])-Werte erhalten.

Die now()-Methode hilft uns, das aktuelle Datum und die aktuelle Uhrzeit zu erhalten und zu entwickeln, und liefert das typische DateTime-Objekt, das wir manipulieren oder parsen können, um alle benötigten Informationen zu erhalten.

from datetime import datetime

todaysDate = datetime.now()

print(todaysDate)

Ausgang:

2022-09-28 06:55:56.832983

Auch die today()-Methode kann verwendet werden, um den gleichen Wert zu erreichen. Allerdings wird die now()-Methode der today()-Methode vorgezogen.

AnoTodaysDate = datetime.today()

Ausgang:

2022-09-29 10:48:43.311880

Zuvor parsen wir das typische Python-DateTime-Objekt in das standardisierte ISO 6801-DateTime. Lassen Sie uns dies umkehren, indem Sie die ISO 6801-DateTime mit dem Python-DateTime-Objekt erstellen.

Um dies zu erreichen, benötigen wir die Methode strftime(), die uns hilft, DateTime-Objekte in ihre String-Darstellung umzuwandeln – diesmal den ISO 6801 DateTime-String.

from datetime import datetime

todaysDate = datetime.now()
todaysDateInISO = todaysDate.strftime("%Y-%m-%dT%H:%M:%S.%f%z")

print(todaysDateInISO)

Ausgang:

2022-09-29T11:08:29.413183

Die todaysDate-Bindung enthält das Python-DateTime-Objekt für das aktuelle Datum und die aktuelle Uhrzeit, und dann übergeben wir die Bindung als Argument an die strftime()-Methode, um das ISO 8601-DateTime-String-Äquivalent zu erstellen.

Wie konvertieren wir nun den ISO 8601-DateTime-String in ein Python-DateTime-Objekt? Wir brauchen eine Methode, die das Gegenteil der strftime()-Methode macht, die strptime().

Diese Methode erstellt ein DateTime-Objekt aus einer DateTime-Zeichenfolge.

Daher übergeben wir einen ISO 6801 DateTime-String als erstes Argument von strptime() und ein weiteres Argument, das das gewünschte Datumsformat definiert – das Python-DateTime-Objekt %Y-%m-%dT%H:%M:%SZ.

parsedDate = datetime.strptime("2022-03-04T21:08:12Z", "%Y-%m-%dT%H:%M:%SZ")
print(parsedDate)

Ausgang:

2022-03-04 21:08:12

Das Datumsformat Y-%m-%dT%H:%M:%SZ verarbeitet Jahr, Monat, Tag, Stunde, Minute und Sekunde unter Verwendung der Formatcodes, die im Python-DateTime-Objekt angegeben sind.

Verwenden Sie fromisoformat(), um das ISO 8601-Datum in Python zu parsen

Ähnlich wie bei den Methoden strftime() und strptime() gibt es spezielle Methoden, die ISO-6801-DateTime-Strings erstellen oder in Python-DateTime-Objekte konvertieren können. Die Methode isoformat() hilft dabei, die nach ISO formatierte Uhrzeit zurückzugeben, die im Format YYYY-MM-DD HH:MM:SS.mmmmmm verarbeitet wird.

Und was noch wichtiger ist, die Methode fromisoformat() nimmt den ISO 8601-DateTime-String und gibt das Python-DateTime-Objektäquivalent zurück.

Um ein ISO 8601 aus einem Python-DateTime-Objekt zu erstellen, können Sie zuerst das DateTime-Objekt mit der Methode now() erstellen und die ISO 8601-Eigenschaft (Format) des Ergebnisses mit isoformat() abrufen.

from datetime import datetime

todaysDate = datetime.now()
todaysDateInISO = todaysDate.isoformat()

print(todaysDateInISO)

Ausgang:

2022-09-28T07:46:13.350585

Das Ergebnis enthält oft ein Trennzeichen zwischen Datum und Uhrzeit. Hier ist es T und kann geändert werden. Sie können das Trennzeichen ändern, indem Sie ein Argument übergeben.

todaysDateInISO = todaysDate.isoformat("$")

print(todaysDateInISO)

Ausgang:

2022-09-28$07:48:11.060212

Nun zum Kern der Sache: Wir können den ISO 8601-DateTime-String in ein typisches Python-DateTime-Objekt parsen.

parsedDate = datetime.fromisoformat(todaysDateInISO)
print(parsedDate)

Ausgang:

2022-09-29 14:38:17.928655

Verwenden Sie dateutil, um das ISO 8601-Datum in Python zu parsen

Das dateutil-Python-Modul ist ein Drittanbietermodul, mit dem Sie die Funktionalitäten erweitern können, auf die über das integrierte datetime-Modul zugegriffen werden kann.

Um es zu installieren, können Sie den Befehl pip verwenden:

pip install python-dateutil

Ausgang:

Collecting python-dateutil
  Downloading python_dateutil-2.8.2-py2.py3-none-any.whl (247 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 247.7/247.7 kB 506.3 kB/s eta 0:00:00
Collecting six>=1.5
  Downloading six-1.16.0-py2.py3-none-any.whl (11 kB)
Installing collected packages: six, python-dateutil
Successfully installed python-dateutil-2.8.2 six-1.16.0

Darüber hinaus können Sie auch Zeitzonenfunktionen mit einem anderen Drittanbietermodul namens pytz einführen, das mit dem Befehl pip installiert werden kann.

pip install pytz

Diese Bibliotheken können problemlos ein ISO 8601-Datumsformat basierend auf einer Zeitzone erstellen und die ISO 8601-DateTime-Zeichenfolge in das typische Python-DateTime-Objekt parsen.

Für das Beispiel verwenden wir die Zeitzone US/Eastern und erstellen einen ISO 8601 DateTime-String mit der timezone()-Methode, der now()-Methode und der isoformat()-Methode.

from datetime import datetime
import pytz

usEasternDate = datetime.now(pytz.timezone("US/Eastern"))
print(usEasternDate)

usEasternDateISO = usEasternDate.isoformat()
print(usEasternDateISO)

Ausgang:

2022-09-29 10:01:17.654150-04:00
2022-09-29T10:01:17.654150-04:00

Um dann den ISO 8601-DateTime-String in das Python-DateTime-Objekt zu parsen, können wir die parse()-Methode mit dem als Argument übergebenen ISO-Datum verwenden.

parsedDate = parser.parse(usEasternDateISO)
print(parsedDate)

Ausgang:

2022-09-29 10:01:17.654150-04:00
Olorunfemi Akinlua avatar Olorunfemi Akinlua avatar

Olorunfemi is a lover of technology and computers. In addition, I write technology and coding content for developers and hobbyists. When not working, I learn to design, among other things.

LinkedIn