Datum und Zeit

Zur Verarbeitung von Datums- und Zeitangaben hält die Standardbibliothek das Module datetime bereit. Die Syntax ist vielleicht auf den ersten Blick etwas verwirrend, aber eigentlich sind die Methoden gut zu benutzen.

Dieses Module enthält 4 Klassen:

  • time

  • date

  • datetime

  • timedelta

Ich importiere die Klassen immer auf dieselbe Weise und immer nur das was ich brauche. Wenn es z.B. nur um das Datum geht und vielleicht noch Datumsdifferenzen schreibe ich:

>>> from datetime import date, timedelta

Jetzt möchte ich wissen, was das aktuelle Datum ist:

>>> d1 = date.today()
>>> print(d1)

Und zum 15. Januar 2019 komme ich so:

>>> d2 = date(2019, 1, 15)
>>> print(d2)

Die Klasse date hat die Attribute year, month und day, die ich direkt verwenden kann.

>>> d2.month

Eine häufige Anforderung ist es ein Datum in einen String, also in ein bestimmtes Format zu überführen, wie das z.B. auf Deutsch verbreitet ist.

>>> datum = d2.strftime("%d.%m.%Y")

Für Zeitdifferenzen ist das Module timedelta zuständig. Die Klasse timedelta kennt die Attribute days und seconds, mit denen sich ja jede Zeitdifferenz abbilden läßt.

>>> delta = d1 - d2
>>> delta.days

Und jetzt können wir z.B. 2 Tage zu einem Datum addieren:

>>> td = timedelta(2)
>>> d3 = d2 + td
>>> print(d2, "+ 2 Tage", d3)

Aber die wichtigste oder zumindest vielseitigste Klasse heißt wie das Module datetime:

>>> from datetime import datetime, date, timedelta
>>> dt1 = datetime.now()
>>> print(dt1)

Häufig verhält sich ein datetime-Objekt ähnlich wie ein date-Objekt, die wichtigsten zusätzlichen Attribute sind hour, minute, second. So kann ein ein datetime-Objekt, genauso wie ein date-Objekt erstellt werden. Die Argumente mit den Zeitangaben haben 0 als Defaultwerte. Bei Zeitdifferenzen geht es jetzt natürlich nicht nur um Tage, sondern auch um Stunden und Minuten.

Wir hatten zuvor aus einem Datums-Objekt einen String erzeugt. Für die umgekehrte Richtung benötigen wir aber das datetime - Module.

So kann hier aus einem String mit einer Zeitangabe ein datetime-Objekt erzeugt werden:

>>> datum = "1.12.21"
>>> dt2 = datetime.strptime(datum, "%d.%m.%y")

Für die Zeitangaben gibt es noch einige andere Kürzel, hier also das Link zu den Format Kürzeln. Und versucht nicht aus einem date-Objekt ein datetime-Objekt zu erzeugen, das ist so nicht vorgesehen.