Mit dem Modul “datetime” kannst du in Python das aktuelle Datum ausgeben und auch mit diesen Werten rechnen.
importieren des Modules datetime in Python
Damit wir mit dem Modul arbeiten können, müssen wir dieses zunächst importieren. Wie du ein Modul in ein Python3 Skript importierst habe ich im Beitrag Python #18: laden von Modulen bereits ausgiebig erläutert.
Die Bibliothek datetime enthält sehr viele andere Module welche wir für diesen Beitrag nicht benötigen daher importieren wir “nur” das “datetime” Modul aus dieser Bibliothek.
from datetime import datetime print (datetime.now())
In diesem kleinen Codeschnippsel habe ich mir gleich noch den aktuellen Zeitstempel ausgeben lassen.
An der Ausgabe ist zu erkennen dass, das Format im Amerikanischen Stil ist, d.h. Jahr-Monat-Tag. Wenn wir dieses ändern wollen so müssen wir uns dieses mit der Funktion “strftime” in unser gewünschtes Format umwandeln.
In meinem Fall habe ich die Millisekunden entfernt da diese in der Regel nicht interessant sind.
Du findest in der offiziellen Python Dokumentation eine sehr gute Übersicht über die verfügbaren Platzhalter um das Datum bzw. die Uhrzeit nach deinen Wünschen zu formatieren.
Zeitstempel erzeugen
Im ersten Beispiel habe ich dir gezeigt wie du den aktuellen Zeitstempel auslesen bzw. ausgeben kannst. Du kannst dir aber auch zu einen Benutzerdefinierten Zeitstempel ein datetime Objekt erzeugen. Dazu musst du dem Objekt “datetime” in runden Klammern die Werte deines Zeitstempels übergeben.
dt = datetime(2020, 12 , 24 , 18 , 30 , 0) ##Jahr, Monat, Tag, Stunde, Minute, Sekunde print(dt)
Die Ausgabe auf der Konsole ist dann der 24.12.2020 um 18:30:00.
Zugriff auf die Felder eines Zeitstempels
Wir haben bereits gesehen das der Zeitstempel welcher sich in unserem datetime Objekt befindet sich aus den Feldern, Jahr, Monat, Tag, Stunde, Minute, Sekunde zusammen setzt und wir können mit der Funktion strftime diesen Wert beliebig formatieren. Jedoch gibt es auch einmal anwendungfälle wo wir nur das aktuelle Jahr wissen wollen (oder den Monat, etc.). Hier können wir bequem auf die Variablen in dem Objekt zugreifen.
from datetime import datetime now = datetime.now() print ("Jahr\t",now.year) print ("Monat\t", now.month) print ("Tag\t", now.day) print ("Stunde\t", now.hour) print ("Minute\t", now.minute) print ("Sekunde\t", now.second)
Wenn wir diesen Code nun ausführen dann werden die Felder des Zeitstempels auf der Konsole ausgegeben.
Unixzeitstempel abfragen
Aus dem datetime Modul läßt sich auch der Unixzeitstempel ablesen. Dieser Wert repräsentiert die vergangenen Sekunden seit dem 01.01.1970. Wir können diesen Wert zbsp. nutzen um ein Zeitstempel bequem in einer Datenbank zu speichern oder aber auch um die Differenz zwischen zwei Daten zu berechnen.
Im nachfolgenden Beispiel berechne ich wieviele Sekunden zwischen jetzt und Heiligabend liegt.
from datetime import datetime now = datetime.now() xmas = datetime(2020, 12, 24, 18, 30, 0) seconds = xmas.timestamp() - now.timestamp() print("Es sind noch", seconds , "Sekunden bis Heiligabend!")
Die Ausgabe ist dann wie folgt:
rechnen mit dem Unixzeitstempel
Wenn wir nun einen Zeitstempel für morgen, oder nächstes Jahr ab jetzt haben möchten so können wir dieses recht einfach berechnen. Wir benötigen nur die Sekunden von 24h und können somit Tageweise (oder Stunden) nach oben oder unten im Datum “rollen”.
Im nachfolgenden Code berechne ich den Zeitstempel für morgen und dem nächsten Jahr, ausgehend von dem aktuellen Zeitstempel.
#Bibliothek datetime from datetime import datetime #auslesen des aktuellen Zeitstempels now = datetime.now() #auslesen des Unixtimestamps timestamp = now.timestamp() #ein Tag hat 86400 Sekunden... secondsOneDay = 86400 #Zeitstempel für morgen ist der aktuelle + Sekunden eines Tages nextDay = datetime.fromtimestamp(timestamp + secondsOneDay) #Zeitstempekl für nächstes Jahr ist aktueller Zeitstempel + (365 * Sekunden eines Tages) #ACHTUNG: Dieses Berechnung beinhaltet kein Schaltjahr! timestamp += (secondsOneDay * 365) nextYear = datetime.fromtimestamp(timestamp) #Ausgeben der Daten print("heute\t\t",now) print("morgen\t\t", nextDay) print("naechstes Jahr\t", nextYear)
Ausgabe auf der Konsole:
Datum & Uhrzeit
Neben dem Modul “datetime” beinhaltet die Bibliothek auch nur die Module “date” & “time”. Diese beiden Module enthalten jeweils nur die jeweiligen Daten zu diesem Teil eines Zeitstempels.
#Module date & time aus der Bibliothek datetime importieren from datetime import date, time #erzeugen eines Datumsobjektes d = date(2020,12,22) #auslesen der Felder eines Datums year = d.year month = d.month day = d.day #erzeugen eines Zeitobjektes t = time(18,45,34) #auslesen der Felder einer Uhrzeit hour = t.hour minute = t.minute seconds = t.second milliseconds = t.microsecond #Ausgeben der Werte print("Jahr\t\t",year) print("Monat\t\t",month) print("Tag\t\t",day) print("Stunde\t\t",hour) print("Minute\t\t",minute) print("Sekunde\t\t",seconds) print("Millisekunde\t",milliseconds)
Es bleibt die Frage offen: Wozu brauchen wir das denn? Es gibt doch das Modul datetime welches die gleichen Felder enthält!
vergleichen von Datums Werten
Wenn wir nun zwei Daten vergleichen wollen und eigentlich nur das Datum so müsste man zunächst am datetime Objekt die Felder der Uhrzeit auf “0” setzen. Oder man entnimmt aus dem datetime Objekt nur das Datum bzw. die Uhrzeit.
#Module datetime, date & time aus der Bibliothek datetime importieren from datetime import datetime from time import sleep date1 = datetime.now() #5 Sekunden Pause sleep(5) date2 = datetime.now() #Ausgeben der beiden Zeitstempel print(date1) print(date2) #vergleichen der beiden Zeitstempel print("Datum & Uhrzeit gleich? ", date1 == date2) print("Datum gleich?", date1.date() == date2.date()) print("Uhrzeit gleich?", date1.time() == date2.time())