Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.

...powered by haas.homelinux.net...

Inhaltsverzeichnis
1 Einleitung
2 Überblick über Python
3 Die Arbeit mit Python
4 Der interaktive Modus
5 Grundlegendes zu Python-Programmen
6 Kontrollstrukturen
7 Das Laufzeitmodell
8 Basisdatentypen
9 Benutzerinteraktion und Dateizugriff
10 Funktionen
11 Modularisierung
12 Objektorientierung
13 Weitere Spracheigenschaften
14 Mathematik
15 Strings
16 Datum und Zeit
17 Schnittstelle zum Betriebssystem
18 Parallele Programmierung
19 Datenspeicherung
20 Netzwerkkommunikation
21 Debugging
22 Distribution von Python-Projekten
23 Optimierung
24 Grafische Benutzeroberflächen
25 Python als serverseitige Programmiersprache im WWW mit Django
26 Anbindung an andere Programmiersprachen
27 Insiderwissen
28 Zukunft von Python
A Anhang
Stichwort

Download:
- ZIP, ca. 4,8 MB
Buch bestellen
Ihre Meinung?

Spacer
 <<   zurück
Python von Peter Kaiser, Johannes Ernesti
Das umfassende Handbuch - Aktuell zu Python 2.5
Buch: Python

Python
gebunden, mit CD
819 S., 39,90 Euro
Galileo Computing
ISBN 978-3-8362-1110-9
Pfeil 16 Datum und Zeit
  Pfeil 16.1 Elementare Zeitfunktionen – time
  Pfeil 16.2 Komfortable Datumsfunktionen – datetime
    Pfeil 16.2.1 datetime.date
    Pfeil 16.2.2 datetime.time
    Pfeil 16.2.3 datetime.datetime

»Zehn Minuten!« – Edmund Stoiber

16 Datum und Zeit

In diesem Kapitel werden Sie die Python-Module kennenlernen, mit deren Hilfe Sie komfortabel mit Zeit- und Datumsangaben arbeiten können.

Python stellt dafür zwei Module zur Verfügung: time und datetime.

Das erste Modul, time, orientiert sich an den Funktionen, die von der zugrunde liegenden C-Bibliothek implementiert werden. Mit datetime werden Klassen zur Verfügung gestellt, mit denen sich in der Regel einfacher und angenehmer als mit Einzelfunktionen arbeiten lässt.

Wir werden im Folgenden beide Module und ihre Funktionen beleuchten.


Galileo Computing - Zum Seitenanfang

16.1 Elementare Zeitfunktionen – time  topZur vorigen Überschrift

Bevor wir uns mit den Funktionen des time-Moduls beschäftigen, müssen 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 sogenannten Unix-Timestamp. Unix-Timestamps sind Zahlen, die einen Zeitpunkt dadurch identifizieren, dass sie die seit Beginn der sogenannten Unix-Epoche (auch nur Epoch genannt) vergangene Zeit in Sekunden angeben. Die Unix-Epoche begann am 01.01.1970 um 00:00 Uhr.

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

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

Die Lokalzeit ist abhängig von dem Standort der jeweiligen Uhr und bezieht sich darauf, 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 [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 England um eine Stunde vorgehen.

Die tatsächliche Lokalzeit kann noch von einem weiteren Faktor beeinflusst werden, 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 an dem aktuellen Standort der richtige ist, sodass wir uns darum nicht zu kümmern brauchen.

Neben der schon angesprochenen Zeitdarstellung durch Unix-Timestamps gibt es ein weiteres Format, das durch einen eigenen Datentyp namens time_struct implementiert wird. Instanzen des Typs time_struct haben neun Attribute, die wahlweise über einen Index oder ihren Namen angesprochen werden können. Die folgende Tabelle zeigt den genauen Aufbau des Datentyps: [Diese Begrenzung kommt durch den Wertebereich für die Unix-Timestamps zustande. Und ja, alle Programme, die auf Unix-Zeitstempel setzen, werden im Jahr 2038 ein Problem bekommen… ]


Tabelle 16.1  Aufbau des Datentyps struct_time
Index Attributname Bedeutung und Wertebereich

0

tm_year

Die Jahreszahl des Zeitstempels

Werte:2 1970-2038

1

tm_mon

Nummer des Monats

Werte: 1-12

2

tm_mday

Nummer des Tags im Monat

Werte: 1-31

3

tm_hour

Stunde der Uhrzeit des Zeitstempels

Werte: 0-23

4

tm_min

Minute der Uhrzeit des Zeitstempels

Werte: 0-59

5

tm_sec

Sekunde der Uhrzeit des aktuellen Zeitstempels

Werte:3 0-61

6

tm_wday

Nummer des Wochentages

Werte: 0-6 (0 entspricht Montag)

7

tm_yday

Nummer des Tages im Jahr

Werte: 0-366

8

tm_isdst

Gibt an, ob der Zeitstempel durch die Sommerzeit angepasst wurde.

Werte: 0 für »Nein«, 1 für »Ja« und –1 für »Unbekannt«


Allen Funktionen, die time_struct-Instanzen als Parameter erwarten, kann alternativ auch ein Tupel mit neun Elementen übergeben werden, das für die entsprechenden Indizes die gewünschten Werte enthält. [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. ]

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

Attribute

time.accept2dyear

Dieses Attribut enthält einen Wahrheitswert, der angibt, ob Jahreszahlen mit nur zwei Ziffern anstatt vier Ziffern angegeben werden können.

time.altzone

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 time.altzone positiv, liegt die lokale Zeitzone westlich davon, negativ.

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

time.daylight

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 time.daylight den Wert 0. Die durch die Sommerzeit entstehende Verschiebung lässt sich mit time.altzone ermitteln.

time.struct_time

Referenz auf den in der Einleitung besprochenen Datentyp struct_time.

Sie können mit time.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
time.timezone

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

time.tzname

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, sollte das zweite Element des Tupels nicht verwendet werden.

>>> time.tzname 
('Westeurop\xe4ische Normalzeit', 'Westeurop\xe4ische Sommerzeit')

Funktionen

time.asctime([t])

Wandelt eine time.struct_time-Instanz oder ein Tupel mit neun Elementen in einen 24-Zeichen-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 time.asctime einen 24–Zeichen-String für den aktuellen Zeitpunkt der Lokalzeit zurück.

time.clock()

Gibt die aktuelle Prozessorzeit zurück. Was dies konkret bedeutet, hängt von der gleichnamigen C-Funktion ab, die zu diesem Zweck aufgerufen wird.

Unter Unix gibt time.clock die Prozessorzeit zurück, die der Python-Prozess schon benutzt hat. Unter Windows ist es der zeitliche Abstand zum ersten Aufruf der Funktion.

Wenn Sie die Laufzeit Ihrer Programme analysieren wollen, ist time.clock in jedem Fall die richtige Wahl:

>>> start = time.clock() 
>>> rechenintensive_funktion() 
>>> ende = time.clock() 
>>> print "Die Funktion lief %1.2f Sekunden" % (ende - start) 
Die Funktion lief 7.46 Sekunden
time.ctime([secs])

Wandelt den als Parameter übergebenen Unix-Timestamp in einen 24-Zeichen-String wie time.asctime um. Wird der optionale Parameter nicht übergeben oder hat er den Wert None, wird der aktuelle Zeitpunkt verwendet.

time.gmtime([secs])

Wandelt einen Unix-Timestamp in ein time.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, wie er von time.time zurückgegeben wird, benutzt.

>>> time.gmtime() 
(2007, 9, 18, 21, 40, 38, 1, 261, 0)

Das obige Beispiel wurde also nach UTC am 18.09.2007 um 21:40 Uhr ausgeführt.

time.localtime([secs])

Genau wie time.gmtime, aber wandelt den übergebenen Timestamp in eine Angabe der lokalen Zeitzone um.

time.mktime(t)

Wandelt eine time.struct_time-Instanz in einen Unix-Timestamp der Lokalzeit um. Der Rückgabewert ist eine Gleitkommazahl.

Die Funktionen time.localtime und time.mktime sind jeweils Umkehrfunktionen voneinander:

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

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.

time.strftime(format[, t])

Wandelt die time.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 Ausgabestrings 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. Die folgende Tabelle zeigt alle unterstützten Platzhalter:


Tabelle 16.2  Übersicht über alle Platzhalter der time.strftime-Funktion
Platzhalter Bedeutung

%a

Lokale Abkürzung für den Namen des Wochentags

%A

Der komplette Name des Wochenstags in der lokalen Sprache

%b

Lokale Abkürzung for 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 Ergebis 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 das aktuellen Tages in der Woche. Sonntag wird als 0. Tag betrachtet. Das Ergebnis liegt im Bereich [0,6].

%W

Wie %U, nur dass statt des Sonntags der Montag als erster 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 Resultatstring.


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

>>> time.strftime("%d.%m.%Y um %H:%M:%S Uhr") 
'19.09.2007 um 00:21:17 Uhr'
time.strptime(string[, format])

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

>>> zeit_string = '19.09.2007 um 00:21:17 Uhr' 
>>> time.strptime(zeit_string, "%d.%m.%Y um %H:%M:%S Uhr") 
(2007, 9, 19, 0, 21, 17, 2, 262, -1)

Wird der optionale Parameter format nicht angegeben, wird der Standardwert "%a %b %d %H:%M:%S %Y" verwendet. Dies entspricht dem Ausgabeformat von time.ctime.

time.time()

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

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



Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.






 <<   zurück
  
  Zum Katalog
Zum Katalog: Python






Python
bestellen
 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchtipps
Zum Katalog: Linux






 Linux


Zum Katalog: Ubuntu GNU/Linux






 Ubuntu GNU/Linux


Zum Katalog: Praxisbuch Web 2.0






 Praxisbuch Web 2.0


Zum Katalog: UML 2.0






 UML 2.0


Zum Katalog: Praxisbuch Objektorientierung






 Praxisbuch Objektorientierung


Zum Katalog: Einstieg in SQL






 Einstieg in SQL


Zum Katalog: IT-Handbuch für Fachinformatiker






 IT-Handbuch für Fachinformatiker


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo