Rheinwerk Computing < openbook >

 
Inhaltsverzeichnis
1 Einleitung
2 Die Programmiersprache Python
Teil I Einstieg in Python
3 Erste Schritte im interaktiven Modus
4 Der Weg zum ersten Programm
5 Kontrollstrukturen
6 Dateien
7 Das Laufzeitmodell
8 Funktionen, Methoden und Attribute
9 Informationsquellen zu Python
Teil II Datentypen
10 Das Nichts – NoneType
11 Operatoren
12 Numerische Datentypen
13 Sequenzielle Datentypen
14 Zuordnungen
15 Mengen
16 Collections
17 Datum und Zeit
18 Aufzählungstypen – Enum
Teil III Fortgeschrittene Programmiertechniken
19 Funktionen
20 Modularisierung
21 Objektorientierung
22 Ausnahmebehandlung
23 Iteratoren
24 Kontextobjekte
25 Manipulation von Funktionen und Methoden
Teil IV Die Standardbibliothek
26 Mathematik
27 Kryptografie
28 Reguläre Ausdrücke
29 Schnittstelle zu Betriebssystem und Laufzeitumgebung
30 Kommandozeilenparameter
31 Dateisystem
32 Parallele Programmierung
33 Datenspeicherung
34 Netzwerkkommunikation
35 Debugging und Qualitätssicherung
36 Dokumentation
Teil V Weiterführende Themen
37 Anbindung an andere Programmiersprachen
38 Distribution von Python-Projekten
39 Grafische Benutzeroberflächen
40 Python als serverseitige Programmiersprache im WWW – ein Einstieg in Django
41 Wissenschaftliches Rechnen
42 Insiderwissen
43 Von Python 2 nach Python 3
A Anhang
Stichwortverzeichnis

Download:
- Beispielprogramme, ca. 464 KB

Jetzt Buch bestellen
Ihre Meinung?

Spacer
<< zurück
Python 3 von Johannes Ernesti, Peter Kaiser
Das umfassende Handbuch
Buch: Python 3

Python 3
Pfeil 17 Datum und Zeit
Pfeil 17.1 Elementare Zeitfunktionen – time
Pfeil 17.1.1 Attribute
Pfeil 17.1.2 Funktionen
Pfeil 17.2 Objektorientierte Datumsverwaltung – datetime
Pfeil 17.2.1 datetime.date
Pfeil 17.2.2 datetime.time
Pfeil 17.2.3 datetime.datetime
Pfeil 17.2.4 datetime.timedelta
Pfeil 17.2.5 Operationen für datetime.datetime und datetime.date
Pfeil 17.2.6 Bemerkung zum Umgang mit Zeitzonen
 
Zum Seitenanfang

17    Datum und Zeit Zur vorigen ÜberschriftZur nächsten Überschrift

In diesem Kapitel werden Sie die Python-Module kennenlernen, mit deren Hilfe Sie mit Zeit- und Datumsangaben arbeiten können. Python stellt dafür zwei Module zur Verfügung: time und datetime.

Das Modul time orientiert sich an den Funktionen, die von der zugrunde liegenden C‐Bibliothek implementiert werden, während datetime eine objektorientierte Schnittstelle für die Arbeit mit Zeitpunkten und Zeitspannen zur Verfügung stellt.

Wir werden uns im Folgenden beide Module und ihre Funktionen genauer anschauen. Um die Module time und datetime verwenden zu können, müssen sie zunächst eingebunden werden:

>>> import time
>>> import datetime
 
Zum Seitenanfang

17.1    Elementare Zeitfunktionen – time Zur vorigen ÜberschriftZur nächsten Überschrift

Bevor wir uns mit den Funktionen des time-Moduls beschäftigen, werden wir einige Begriffe einführen, die für das Verständnis, wie Zeitangaben verwaltet werden, erforderlich sind.

Das time-Modul setzt 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 Uhr[ 60 ](Mit dem 01.01.1970 um 00:00 Uhr ist der Beginn der sogenannten Unix-Epoche datiert. Sie wurde zur einheitlichen Beschreibung von Zeiten eingeführt. ) vergangen sind.

Beispielsweise markiert der Unix-Timestamp mit dem Wert 1190132696.0 den 18.09.2007 um 18:24 Uhr und 56 Sekunden, da seit dem Beginn der Unix-Epoche bis zu diesem Zeitpunkt genau 1.190.132.696,0 Sekunden vergangen sind.

Beim Umgang mit Zeitstempeln muss man zwei verschiedene Angaben unterscheiden: die Lokalzeit und die koordinierte Weltzeit.

Die Lokalzeit ist abhängig vom Standort der jeweiligen Uhr und bezieht sich auf das, was die Uhren an diesem Standort anzeigen müssen, um richtig zu gehen. Als koordinierte Weltzeit wird die Lokalzeit auf dem Null-Meridian verstanden, der unter anderem durch Großbritannien verläuft. Die koordinierte Weltzeit wird mit UTC für Coordinated Universal Time abgekürzt.[ 61 ](Nein, die Abkürzung UTC für Coordinated Universal Time ist nicht fehlerhaft, sondern rührt daher, dass man einen Kompromiss zwischen der englischen Variante »Coordinated Universal Time« und der französischen Bezeichnung »Temps Universel Coordonné« finden wollte. ) Alle Lokalzeiten lassen sich relativ zur UTC angeben, indem man die Abweichung in Stunden nennt. Beispielsweise hat Mitteleuropa die Lokalzeit UTC + 1, was bedeutet, dass unsere Uhren im Vergleich zu denen in Großbritannien um eine Stunde vorgehen.

Die tatsächliche Lokalzeit wird noch von einem weiteren Faktor beeinflusst, der Sommer- bzw. Winterzeit. Diese auch mit DST für Daylight Saving Time (dt. »Sommerzeit«) abgekürzte Verschiebung ist von den gesetzlichen Regelungen der jeweiligen Region abhängig und hat in der Regel je nach Jahreszeit einen anderen Wert. Das time-Modul findet für den Programmierer heraus, welcher DST-Wert auf der gerade benutzten Plattform am aktuellen Standort der richtige ist, sodass wir uns darum nicht zu kümmern brauchen.

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 angesprochen werden können. Tabelle 17.1 zeigt den genauen Aufbau des Datentyps.

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«
* Diese Begrenzung kommt durch den Wertebereich für die Unix-Timestamps zustande, wenn man 32-Bit-Integer-Zahlen für die Speicherung verwendet. Und ja, alle Programme, die auf Unix-Zeitstempel setzen und diese in 32-Bit-Integer-Variablen abspeichern, werden im Jahr 2038 ein Problem bekommen …
** Es ist tatsächlich der Bereich von 0 bis 61, um sogenannte Schaltsekunden zu kompensieren. Schaltsekunden dienen dazu, die Ungenauigkeiten der Erdrotation bei Zeitangaben auszugleichen. Sie werden sich in der Regel nicht darum kümmern müssen.

Tabelle 17.1    Aufbau des Datentyps struct_time

Allen Funktionen, die struct_time-Instanzen als Parameter erwarten, können Sie alternativ auch ein Tupel mit neun Elementen übergeben, das für die entsprechenden Indizes die gewünschten Werte enthält.

Nun gehen wir zur Besprechung der Modulfunktionen und -attribute über.

 
Zum Seitenanfang

17.1.1    Attribute Zur vorigen ÜberschriftZur nächsten Überschrift

Das Modul time beinhaltet folgende Attribute:

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

Tabelle 17.2    Attribute des Moduls time

altzone

Dieses Attribut speichert die Verschiebung der Lokalzeit von der UTC in Sekunden, wobei eine eventuell vorhandene Sommerzeit auch berücksichtigt wird. Liegt die aktuelle Zeitzone östlich vom Null-Meridian, ist der Wert von altzone positiv; liegt die lokale Zeitzone westlich davon, ist er negativ.

Dieses Attribut sollte nur dann benutzt werden, wenn daylight nicht den Wert 0 hat.

daylight

Dieses Attribut hat einen Wert, der von 0 verschieden ist, wenn es in der lokalen Zeitzone eine Sommerzeit gibt. Ist für den lokalen Standort keine Sommerzeit definiert, hat daylight den Wert 0. Die durch die Sommerzeit entstehende Verschiebung lässt sich mit altzone ermitteln.

struct_time

Dies ist eine Referenz auf den eingangs besprochenen Datentyp struct_time.

Sie können mit struct_time direkt Instanzen dieses Typs erzeugen, indem Sie dem Konstruktor eine Sequenz mit neun Elementen übergeben:

>>> t = time.struct_time((2007, 9, 18, 18, 24, 56, 0, 0, 0))
>>> t.tm_year
2007

timezone

Dieses Attribut speichert die Verschiebung der Lokalzeit relativ zur UTC in Sekunden, wobei eine eventuell vorhandene Sommerzeit nicht berücksichtigt wird.

tzname

Dieses Attribut enthält ein Tupel mit zwei Strings. Der erste String ist der Name der lokalen Zeitzone und der zweite der der lokalen Zeitzone mit Sommerzeit. Wenn die Lokalzeit keine Sommerzeit kennt, sollten Sie das zweite Element des Tupels nicht verwenden.

>>> time.tzname
('Mitteleuropäische Zeit', 'Mitteleuropäische Sommerzeit')
 
Zum Seitenanfang

17.1.2    Funktionen Zur vorigen ÜberschriftZur nächsten Überschrift

Einen Überblick über die Funktionen des Moduls time gibt Ihnen Tabelle 17.3.

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 struc_time-Instanz um. Dabei wird die koordinierte Weltzeit zugrunde gelegt.
localtime([secs]) Wandelt einen Unix-Timestamp in eine struc_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 Regeln in einen String um.
strptime(string, [format]) Interpretiert einen String nach den übergebenen Regeln als Zeitangabe und liefert eine passende struct_time-Instanz.
time() Gibt den aktuellen Unix-Zeitstempel zurück. Dabei wird die koordinierte Weltzeit zugrunde gelegt.

Tabelle 17.3    Funktionen des Moduls time

asctime([t])

Diese Funktion wandelt eine struct_time-Instanz oder ein Tupel mit neun Elementen in einen String um. Die Form des resultierenden Strings zeigt das folgende Beispiel:

>>> time.asctime((1987, 7, 26, 10, 40, 0, 0, 0, 0))
'Mon Jul 26 10:40:00 1987'

Wird der optionale Parameter t nicht übergeben, gibt asctime einen String für die aktuelle Systemzeit zurück.

Die Funktion ctime leistet das Gleiche wie asctime, nur für Unix-Timestamps.

[»]  Hinweis

Die Funktion asctime liefert immer einen String zurück, der aus 24 Zeichen besteht und so formatiert ist, wie im Beispiel gezeigt.

Wenn Sie mehr Kontrolle über das Aussehen des resultierenden Strings wünschen, ist die Methode strftime besser geeignet.

perf_counter()

Diese Funktion gibt einen Zeitzähler zurück, der sich gut für die Messung von Laufzeiten innerhalb von Programmen eignet. Dabei wird auf die Uhr mit der höchsten Auflösung zurückgegriffen, die das Betriebssystem zur Verfügung stellt.

>>> start = time.perf_counter()
>>> rechenintensive_funktion()
>>> ende = time.perf_counter()
>>> print("Die Funktion lief "
... "{:1.2f} Sekunden".format(ende - start))
Die Funktion lief 7.46 Sekunden

gmtime([secs])

Diese Funktion wandelt einen Unix-Timestamp in ein struct_time-Objekt um. Dabei wird immer die koordinierte Weltzeit benutzt, und das tm_isdst-Attribut des resultierenden Objekts hat immer den Wert 0.

Wird der Parameter secs nicht übergeben oder hat er den Wert None, wird der aktuelle Zeitstempel benutzt, wie er von der Funktion time zurückgegeben wird.

>>> time.gmtime()
time.struct_time(tm_year=2017, tm_mon=1, tm_mday=18, tm_hour=16, tm_min=11, tm_sec=45, tm_wday=6, tm_yday=18, tm_isdst=0)

Das Beispiel oben wurde also nach UTC am 18.01.2017 um 16:11 Uhr ausgeführt.

localtime([secs])

Genau wie gmtime, jedoch wandelt diese Funktion den übergebenen Timestamp in eine Angabe der lokalen Zeitzone um.

mktime(t)

Diese Funktion wandelt eine struct_time-Instanz in einen Unix-Timestamp der Lokalzeit um. Der Rückgabewert ist eine Gleitkommazahl.

Die Funktionen localtime und mktime sind jeweils Umkehrfunktionen voneinander:

>>> t1 = time.localtime()
>>> t2 = time.localtime(time.mktime(t1))
>>> t1 == t2
True

sleep(secs)

Die Funktion sleep unterbricht die Programmausführung für die übergebene Zeitspanne. Der Parameter secs muss dabei eine Gleitkommazahl sein, die die Dauer der Unterbrechung in Sekunden angibt.

Wenn Sie ein Programm mittels sleep unterbrechen, befindet es sich im Leerlauf und beansprucht den Prozessor nicht.

strftime(format, [t])

Diese Funktion wandelt die struct_time-Instanz t oder ein neunelementiges Tupel t in einen String um. Dabei wird mit dem ersten Parameter namens format ein String übergeben, der das gewünschte Format des Ausgabe-Strings enthält.

Ähnlich wie der Formatierungsoperator für Strings enthält der Format-String eine Reihe von Platzhaltern, die im Ergebnis durch die entsprechenden Werte ersetzt werden. Jeder Platzhalter besteht aus einem Prozentzeichen und einem Identifikationsbuchstaben. Tabelle 17.4 zeigt 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 Ziffern im Bereich [01,12]
%M Minute als Zahl mit zwei Ziffern. Liegt immer im Bereich [00,59].
%p die lokale Entsprechung für AM bzw. 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 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.
* von lat. »ante meridiem« (dt. »vor dem Mittag«) bzw. lat. »post meridiem« (»nach dem Mittag«)

Tabelle 17.4    Übersicht über alle Platzhalter der strftime-Funktion

Mit dem folgenden Ausdruck erzeugen Sie beispielsweise eine Ausgabe des aktuellen Zeitpunktes in einem für Deutschland üblichen Format:

>>> time.strftime("%d.%m.%Y um %H:%M:%S Uhr")
'20.01.2017 um 12:50:41 Uhr'

strptime(string, [format])

Mit strptime wandeln Sie einen Zeit-String wieder in eine time.struct_time-Instanz um. Der Parameter format gibt dabei das Format an, in dem der String die Zeit enthält. Der Aufbau solcher Format-Strings ist der gleiche wie bei strftime.

>>> zeit_string = '19.09.2007 um 00:21:17 Uhr'
>>> time.strptime(zeit_string, "%d.%m.%Y um %H:%M:%S Uhr")
time.struct_time(tm_year=2007, tm_mon=9, tm_mday=19, tm_hour=0, tm_min=21,
tm_sec=17, tm_wday=2, tm_yday=262, tm_isdst=-1)

Geben Sie den optionalen Parameter format nicht an, wird der Standardwert "%a %b %d %H:%M:%S %Y" verwendet. Dies entspricht dem Ausgabeformat von ctime und asctime.

time()

Dies gibt den aktuellen Unix-Zeitstempel in UTC als Gleitkommazahl zurück.

Beachten Sie dabei, dass nicht alle Systeme eine höhere Auflösung als eine Sekunde unterstützen und der Nachkommateil daher nicht unbedingt verlässlich ist.

 


Ihre Meinung

Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.

<< zurück
 Zum Rheinwerk-Shop
Zum Rheinwerk-Shop: Python 3 Python 3
Jetzt Buch bestellen

 Buchempfehlungen
Zum Rheinwerk-Shop: Einstieg in Python
Einstieg in Python


Zum Rheinwerk-Shop: Python. Der Grundkurs
Python. Der Grundkurs


Zum Rheinwerk-Shop: Algorithmen mit Python
Algorithmen mit Python


Zum Rheinwerk-Shop: Objektorientierte Programmierung
Objektorientierte Programmierung


Zum Rheinwerk-Shop: Raspberry Pi. Das umfassende Handbuch
Raspberry Pi. Das umfassende Handbuch


Zum Rheinwerk-Shop: Roboter-Autos mit dem Raspberry Pi
Roboter-Autos mit dem Raspberry Pi


Zum Rheinwerk-Shop: Neuronale Netze programmieren mit Python
Neuronale Netze programmieren mit Python


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
InfoInfo

 
 


Copyright © Rheinwerk Verlag GmbH 2020
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das Openbook denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.
Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

 
[Rheinwerk Computing]

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern