Python #26 – Modul „datetime“

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.

Python3 - Modul "datetime" mit Funktion "now()"
Python3 – Modul „datetime“ mit Funktion „now()“

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.

Python3 - Modul "datetime" formatieren des Zeitstempels mit strftime
Python3 – Modul „datetime“ formatieren des Zeitstempels mit strftime

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.

Python3 - Modul "datetime", benutzerdefinierter Zeitstempel
Python3 – Modul „datetime“, benutzerdefinierter Zeitstempel

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.

Python3 - Modul "datetime" ausgeben der Felder eines Zeitstempels
Python3 – Modul „datetime“ ausgeben der Felder eines Zeitstempels

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:

Python3 - Modul "datetime" rechnen mit dem Unixtimestamp
Python3 – Modul „datetime“ rechnen mit dem Unixtimestamp

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:

Python3 - Modul "datetime" rechnen mit dem Unixtimestamp
Python3 – Modul „datetime“ rechnen mit dem Unixtimestamp

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())

Python3 - Modul "datetime" Vergleich von Datum & Uhrzeit
Python3 – Modul „datetime“ Vergleich von Datum & Uhrzeit

 

 

 

 

 

 

Ein Kommentar

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.