Python: Zeit und Datum
► Python-Dokumentation: time datetime calendar
Zeitangaben werden üblicherweise als Zeitstempel in der Unixzeit angegeben. Die Unixzeit zählt die Sekunden ab dem 1. Januar 1970 um 0:00 Uhr UTC. Die Zeitstempel in Python sind vom Datentyp float, wobei die Nachkommastelle den Millisekunden-Anteil angibt. Um Zeitstempel zu erzeugen oder in ein menschenlesbares Format umzuwandeln, stehen verschiedene Funktionen aus dem Modul time zur Verfügung. Weiterführende Funktionen sind in den Modulen datetime sowie calendar enthalten, auf die hier nicht weiter eingegangen wird.
import time
now = time.time()
print("Aktueller Zeitstempel:", now)
Weltzeit und Ortszeit
► Python-Dokumentation: gmtime localtime
Über die Funktionen gmtime und localtime können verschiedene Zeit- und Datumsangaben eines Zeitstempels ermittelt werden. Wird die Funktion ohne Angabe eines Arguments aufgerufen, so wird der aktuelle Zeitpunkt übergeben.
Während mit gmtime ein Zeitobjekt in Weltzeit (UTC) erzeugt wird, erhält man mit localtime ein Zeitobjekt in der Zonenzeit des Rechners, auf dem Python ausgeführt wird (unter Berücksichtigung einer Sommerzeitregelung).
datetime = time.gmtime( 1634177174) # 14. Oktober 2021, 02:06:14 Uhr UTC (= GMT)
datetime = time.localtime(1634177174) # 14. Oktober 2021, 04:06:14 Uhr CEST (= MESZ)
now = time.localtime() # gleichbedeutend mit time.localtime(time.time())
print("Jahr:", now.tm_year)
print("Monat:", now.tm_mon)
print("Tag:", now.tm_mday)
print("Stunde:", now.tm_hour)
print("Minute:", now.tm_min)
print("Sekunde:", now.tm_sec)
print("Wochentag:", now.tm_wday) # Montag = 0
print("Tag des Jahres:", now.tm_yday)
print("Sommerzeit:", now.tm_isdst) # Sommerzeit: 1; Winterzeit: 0
print("Zeitzone:", now.tm_zone)
print("Differenz zu UTC in Sekunden:", now.tm_gmtoff)
Zeitstempel mit mktime erzeugen
► Python-Dokumentation: mktime
Mit der Funktion mktime() lässt sich aus einer lokalen Zeitangabe ein Zeitstempel erzeugen. Die für diese Funktion benötigten Argumente können aus folgendem Beispiel abgeleitet werden:
jahr = 2013
monat = 2
tag = 7
stunde = 18
minute = 30
sekunde = 15
timestamp = time.mktime((jahr, monat, tag, stunde, minute, sekunde, 0, 0, 0))
print(timestamp)
Zeitstempel mit timegm erzeugen
► Python-Dokumentation: timegm
Mit der Funktion timegm() lässt sich aus einer UTC-Zeitangabe ein Zeitstempel erzeugen. Diese Funktion ist allerdings im Modul calendar enthalten, das zunächst importiert werden muss. Die für diese Funktion benötigten Argumente können aus folgendem Beispiel abgeleitet werden:
import calendar
jahr = 2013
monat = 2
tag = 7
stunde = 18
minute = 30
sekunde = 15
timestamp = calendar.timegm((jahr, monat, tag, stunde, minute, sekunde, 0, 0, 0))
print(timestamp)
Zeitstempel mit strftime auswerten
► Python-Dokumentation: strftime
Mit der Funktion strftime() lassen sich in Verbindung mit localtime() aus einem Zeitstempel weitere Zeitangaben ermitteln, die als String zurückgegeben werden. Die gewünschten Zeitangaben können über spezielle Direktiven ermittelt werden, die als %-Zeichen gefolgt von einem Buchstaben angegeben werden.
Um die Strings für Monatsnamen und Wochentagnamen in der Sprache der Benutzersystems auszugeben, kann die Spracheinstellung mit der Funktion setlocale() aus dem Modul locale eingestellt werden.
import time, locale
locale.setlocale(locale.LC_ALL, '')
...
datetime = time.localtime(timestamp)
print(time.strftime("Tag: %d", datetime))
print(time.strftime("Monat: %m", datetime))
print(time.strftime("Jahr: %Y", datetime))
print(time.strftime("Stunde: %H", datetime))
print(time.strftime("Minute: %M", datetime))
print(time.strftime("Sekunde: %S", datetime))
print(time.strftime("Stunde im 12-Stunden-Format: %I", datetime))
print(time.strftime("AM/PM: %p", datetime))
print(time.strftime("Kompakte Form: %c", datetime))
print(time.strftime("Datum: %x", datetime))
print(time.strftime("Zeit: %X", datetime))
print(time.strftime("Jahr mit zwei Stellen: %y", datetime))
print(time.strftime("Tag des Jahres: %j", datetime))
print(time.strftime("Wochentag Kurzform: %a", datetime))
print(time.strftime("Wochentag Langform: %A", datetime))
print(time.strftime("Tag der Woche: %w", datetime)) # Sonntag = 0
print(time.strftime("Monat Kurzform: %b", datetime))
print(time.strftime("Monat Langform: %B", datetime))
print(time.strftime("Woche des Jahres (beginnend mit Sonntag): %U", datetime))
print(time.strftime("Woche des Jahres (beginnend mit Montag): %W", datetime))
print(time.strftime("Zeitzone: %Z", datetime))