Wissensdatenbank von GCSoft

>> Wissensdatenbank / Python 3

Datum und Zeit

Python stellt für das Arbeiten mit Zeit- und Datumsangaben zwei Module zur Verfügung: time und datetime.

Elementare Zeitfunktionen - time

Das time-Modul sezt direkt auf den Zeitfunktionen der C-Bibliothek des Betriebssystems auf und speichert
deshalb alle Zeitangaben als Unix-Timestamps. Ein Unix-Timestamp beschreibt einen Zeitpunkt durch die Anzahl der
Sekunden, die seit dem 01.01.1970 um 00:00 vergangen sind.

Beim Umgang mit Zeitstempeln muss man zwei verschiedene Angaben unterscheiden: die Lokalzeit und die
koordinierte Weltzeit (UTC - Coordinated Universal Time).
Die tatsächliche Lokalzeit wird noch vom Faktor der Sommer- bzw. Winterzeit beeinflusst, diese Verschiebung wird mit DST
(Daylight Saving Time)
abgekürzt.

Neben der schon angesprochenen Zeitdarstellung durch Unix-Timestamps gibt es eine weitere Darstellung von Zeiten
durch den Datentyp struct_time. Die Instanzen des Typs struct_time haben neun Attribute, die wahlweise über
einen Index oder ihren Namen angsprochen werden können.

Aufbau des Datentyps struct_time

Index Attribut Bedeutung Wertebereich
0 tm_year die Jahreszahl des Zeitstempels 1970 - 2038
1 tm_mon Nummer des Monats 1 - 12
2 tm_mday Nummer des Tages im Monat 1 - 31
3 tm_hour Stunde der Uhrzeit des Zeitstempels 0 - 23
4 tm_min Minute der Uhrzeit des Zeitstempels 0 - 59
5 tm_sec Sekunde der Uhrzeit des Zeitstempels 0 - 61
6 tm_wday Nummer des Wochentages (0 entspricht Montag) 0 - 6
7 tm_yday Nummer des Tages im Jahr 0 - 366
8 tm_isdst Gibt an, ob der Zeitstempel durch die Sommerzeit
angepasst wurde.
0: "Nein",
1: "Ja",
-1: "Unbekannt"

Attribute des Moduls time

Attribut Beschreibung
altzone Verschiebung der Lokalzeit inklusive Sommerzeit gegenüber der koordinierten Weltzeit in Sekunden.
daylight Gibt an, ob es in der lokalen Zeitzone eine Sommerzeit gibt.
struct_time Referenz auf den Datentyp zur Speicherung von Zeiten.
timezone Verschiebung der Lokalzeit exklusive Sommerzeit gegenüber der koordinierten Weltzeit in Sekunden.
tzname Beschreibung der Zeitzone.

Funktionen des Moduls time

Funktion Beschreibung
asctime([t]) Konvertiert die übergebene struct_time-Instanz in einen String.
perf_counter() Liefert Zeitpunkte, die sich zur Performance-Messung von Programmen eignen.
ctime([secs]) Konvertiert den übergebenen Unix-Zeitstempel in einen String. Falls kein Zeitstempel
übergeben wurde, wird die aktuelle Systemzeit verwendet.
gmtime([secs]) Wandelt einen Unix-Timestamp in eine struct_time-Instanz um. Dabei wird die
koordinierte Weltzeit zugrunde gelegt.
localtime([secs]) Wandelt einen Unix-Timestamp in eine struct_time-Instanz um. Dabei wird die
Lokalzeit zugrunde gelegt.
mktime(t) Wandelt eine struct_time-Instanz in einen Unix-Timestamp um. Dabei wird die
Lokalzeit zugrunde gelegt.
sleep(secs) Unterbricht den Programmablauf.
strftime(format, [t]) Wandelt eine struct_time-Instanz nach den übergebenen Regen in einen String um.
strptime(string, [format]) Interpretiert einen String nach den übergebenen Regen als Zeitangabe und liefert
eine passende struct_time-Instanz.
time() Gibt den aktuellen Unix-Zeitstempel zurück Dabei wird die koordinierte Weltzeit
zugrunde gelegt.
strftime - alle unterstützten Platzhalter
Zeichen Bedeutung
%a Lokale Abkürzung für den Namen des Wochentages.
%A Der komplette Name des Wochentages in der lokalen Sprache.
%b Lokale Abkürzung für den Namen des Monats.
%B Der vollständige Name des Monats in der lokalen Sprache.
%c Das Format für eine angemessene Datums- und Zeitdarstellung auf der lokalen Plattform.
%d Nummer des Tages im aktuellen Monat. Ergibt einen String der Länge 2 im Bereich [01, 31].
%H Stunde im 24-Stunden-Format. Das Ergebnis hat immer zwei Ziffern und liegt im Bereich [00, 23].
%I Stunde im 12-Stunden-Format. Das Ergebnis hat immer zwei Ziffern und liegt im Bereich [01, 12].
%j Nummer des Tages im Jahr. Das Ergebnis hat immer drei Ziffern und liegt im Bereich [001, 366].
%m Nummer des Monats, bestehend aus zwei Ziffer im Bereich [01, 12].
%M Minute als Zahl mit zwei Ziffern. Liegt immer im Bereich [00, 59].
%p Die lokale Entsprechung für AM und PM.
%S Sekunde als Zahl mit zwei Ziffern. Liegt immer im Bereich [00, 61].
%U Nummer der aktuellen Woche im Jahr, wobei der Sonntag als erster Tag der Woche betrachtet wird.
Das Ergebnis hat immer zwei Ziffern und liegt im Bereich [01, 53].
Der Zeitraum am Anfang eines Jahres vor dem ersten Sonntag wird als 0. Woche gewertet.
%w Nummer des aktuellen Tages in der Woche. Sonntag wird als 0. Tag betrachtet.
Das Ergebnis liegt immer im Bereich [0, 6].
%W Wie %U, nur dass anstelle des Sonntags der Montag als 0. Tag der Woche betrachtet wird.
%x Datumsformat der lokalen Plattform.
%X Zeitformat der lokalen Plattform.
%y Jahr ohne Jahrhundertangabe. Das Ergebnis besteht immer aus zwei Ziffern und liegt im Bereich [00, 99].
%Y Komplette Jahreszahl mit Jahrhundertangabe.
%Z Name der lokalen Zeitzone oder ein leerer String, wenn keine lokale Zeitzone festgelegt wurde.
%% Ergibt ein Prozentzeichen % im Resultat-String.

Objektorientierte Daumsverwaltung - datetime

Es werden vier Datentypen im Modul datetime zur Verfügung gestellt:

datetime.date

Eine datetime.date-Instanz beschreibt einen Tag auf der Zeitachse, indem das Jahr, der Monat und der Tag
im Monat in den Attributen year, month und day gespeichert werden.
d = datetime.date(1995, 3, 28)

Die wichtigsten Methoden für den Umgang mit datetime.date-Instanzen:

Methode Beschreibung
ctime() Erzeugt einen String, der den von der datetime.date-Instanz beschriebenen Tag im
Format 'Tue Oct 23 00:00:00 1989' angibt.
isoformat() Wandelt die datetime.date-Instanz in einen String der Form "YYYY-MM-DD" um.
replace({year, month, day}) Erzeugt eine neue datetime.date-Instanz aus einer bestehenden, indem einzelne Elemente ersetzt werden.
strftime(format) Wandelt die datetime.date-Instanz gemäß einer Formatbeschreibung in einen String um (siehe time.strftime).
timetuple() Erzeugt eine time.struct_time-Instanz, die dem Datum der datetime.date-Instanz entspricht.
weekday() Gibt den Tag innerhalb der Woche zurück. Dabei entspricht 0 dem Monatg und 6 dem Sonntag.

datetime.time

Objekte des Typs datetime.time dienen dazu, Tageszeiten anhand von Stunde, Minute, Sekunde und Mikrosekunde zu verwalten.
Eine datetime.time-Instanz besitzt die Attribute hour, minute, second und
microsecond.
t = datetime.time(2, 30, 25)
t = datetime.time(hour=12, second=36, microsecnd=123456)

Die wichtigsten Methoden für den Umgang mit datetime.time-Instanzen:

Methode Beschreibung
isoformat() Erzeugt einen String im Format "HH:MM:SS.mmmmmm", der den Zeitpunkt beschreibt. Ist das
Attribut microsecond 0, hat der String das Format "HH:MM:SS".
replace([hour, minute, second, microsecond]) Erzeugt eine neue datetime.time-Instanz aus einer vorhandenen, indem die übergebenen Angaben ersetzt werden.
strftime(format) Wandelt die datetime.time-Instanz gemäß einer Formatbeschreibung in einen String um (siehe time.strftime).

datetime.datetime

Der Datentyp datetime.datetime vereint die Fähigkeiten von datetime.date und datetime.time in einen Datentyp.
dt = datetime.datetime(1989, 12, 24, 18, 30)

Klassenmethoden, um bestimmte datetime.datetime-Instanzen zu erzeugen:

Die wichtigsten Methoden für den Umgang mit datetime.datetime-Instanzen:

Methode Beschreibung
ctime() Wandelt eine datetime-Instanz in einen String im Format 'Tue Oct 23 16:03:12 1989' um.
date() Gibt ein datetime.date-Objekt zurück, das dem Tag der datetime-Instanz entspricht.
isoformat([sep]) Wandelt die datetime-Instanz in einen String im Format "YYYY-MM-DDTHH:MM:SS.mmmmmm" um.
replace([year, month, day, hour,
minute, second, microsecond])
Erzeugt eine neue datetime-Instanz aus einer vorhandenen, indem die übergebenen Angaben ersetzt werden.
strftime(format) Wandelt die datetime-Instanz gemäß einer Formatbeschreibung in einen String um (siehe time.strftime).
time() Gibt ein datetime.time-Objekt zurück, das der Tageszeit der datetime-Instanz entspricht.
timetuple() Erzeugt eine time.struct_time-Instanz, die denselben Zeitpunkt beschreibt wie die datetime-Instanz.
weekday() Gibt den Wochentag als Zahl zurück, wobei Monatg den Wert 0 und Sonntag den Wert 6 ergibt.

datetime.timedelta

Mit Instanzen des Datentyps datetime.timedelta können Zeitspannen beschrieben werden.
delta = d2 -d1 (wobei d1 und d2 datetime.datetime-Instanzen sind)

Dabei speichert eine datetime.timedelta-Instanz die Anzahl der Tage, Sekunden und Mikrosekunden
der Zeitspanne getrennt ab. Der Zugriff auf die Attribute erfolgt über days, seconds
und microseconds.

Die ermittelte Zeitspanne hat ein Vorzeichen, wobei z.B. die Tage ein negatives und die Sekunden ein
positives Vorzeichen haben können (die Tage werden abgezogen, die Sekunden dazugezählt, um von d1 zu d2 zu kommen).
Nur die Tage können ein negatives Vorzeichen aufweisen.

Der Konstruktor von timedelta kann in jedem Attribut positive oder negative Vorzeichen aufweisen.
td = datetime.timedelta(days=-32, seconds=-29700)

Die einzige Methode einer timedelta-Instanz ist total_seconds(), mit der eine Zeitspanne in eine
Angabe in Sekunden umgerechnet wird.

Da timedelta-Instanzen als einfache Zahl, nämlich als ihr Äquivalent in Sekunden, betrachtet werden können,
kann mit ihnen wie mit Zahlen gerechnet werden.

Eine Übersicht über die verfügbaren Rechenoperationen für datetime.timedelta-Instanzen
(t1, t2 timedelta-Instanzen, i int-Instanz, f float-Instanz):

Operation Beschreibung
t1 + t2 Bildet die Summe zweier timedelta-Instanzen.
t1 - t2 Bildet die Differenz zweier timedelta-Instanzen.
t1 * i
t1 * f
Erzeugt eine timedelta-Instanz, die i- bzw. f-mal so lang ist wie t1. Ist das Vorzeichen von i bzw. f
negativ, dreht sich außerdem die Richtung auf der Zeitachse um.
t1 / t2
t1 / i
t1 / f
Bildet den Quotienten aus zwei timedelta-Instanzen oder einer timedelta-Instanz und einer Ganz-
oder Gleitkommazahl.
t1 // t2
t1 // i
Wie der Operator /, außer dass zusätzlich abgerundet wird.
t1 % t2 Liefert den Divisionsrest bei der Division zweier timedelta-Instanzen.
<, <=, >, >= Vergleicht zwei timedelta-Instanzen.
q, r = divmod(t1, t2) Erzeugt ein Tupel aus q = t1 // t2 und r = t1 % t2, also dem abgerundeten Quotienten
und dem Divisionsrest.
abs(t1) Erzeugt eine timedelta-Instanz, die die gleiche Dauer wie t1 beschreibt, aber in Richtung der positiven
Zeitachse zeigt.

Operationen für datetime.datetime und datetime.date

Es kann auch mit datetime.datetime- und datetime.date-Instanzen gerechnet werden.

Bemerkung zum Umgang mit Zeitzonen

Dabei spielt die Klasse tzinfo eine zentrale Rolle.