Die Python-Standardbibliothek datetime kann zur Verarbeitung von Datums- und Zeitangaben (Datum, Zeit und Uhrzeit) verwendet werden. Die Methoden strftime() und strptime(), die Datums- und Zeitangaben in und aus Strings konvertieren, können verwendet werden, um Datums- und Zeitangaben in einer Vielzahl von Formaten zu manipulieren.
Es kann auch Operationen wie Subtraktion und Addition durchführen. Sie können zum Beispiel leicht das Datum vor 10 Tagen oder in 3 Wochen oder die Uhrzeit in 50 Minuten berechnen und abrufen.
Zunächst werden die folgenden Klassen von Objekten beschrieben, die im datetime-Modul verfügbar sind.
datetime.datetime
:Datum und Uhrzeit (Datum und Uhrzeit)datetime.date
:Datumdatetime.time
:Zeitdatetime.timedelta
:Zeitunterschied und verstrichene Zeit
Die Methoden strftime() und strptime(), die date\time und string ineinander umwandeln, werden ebenfalls erklärt.
datetime
Objektdatetime.now()
:Heutiges Datum, aktuelle Uhrzeitdatetime
Objekt-Konstrukteur- Umwandlung eines datetime-Objekts in ein Datumsobjekt
date
Objektdate.today()
:Heutiges Datum- Konstruktor für das Datumsobjekt
time
Objekt- Konstruktor für das Zeitobjekt
timedelta
Objekt- Subtrahieren Sie datetime- und date-Objekte, um timedelta-Objekte zu erstellen.
- Konstruktor für das Timedelta-Objekt
- Subtraktion und Addition mit Timedelta-Objekten
strftime()
:Umwandlung von Datum und Uhrzeit in einen Stringstrptime()
:Umwandlung von String in Datum und Uhrzeit
Ebenfalls in der Standardbibliothek enthalten ist das Kalendermodul, das Kalender im reinen Text- oder HTML-Format erzeugt.
Datetime-Objekt
Ein datetime-Objekt ist ein Objekt, das sowohl Datums- (Jahr, Monat, Tag) als auch Zeitinformationen (Stunde, Minute, Sekunde, Mikrosekunde) enthält. Sie können auf diese Informationen mit den folgenden Attributen zugreifen.
year
month
day
hour
minute
second
microsecond
datetime.now(): Heutiges Datum, aktuelle Uhrzeit
datetime.now() liefert Ihnen ein datetime-Objekt mit dem heutigen Datum (dem aktuellen Datum) und der aktuellen Uhrzeit.
import datetime
dt_now = datetime.datetime.now()
print(dt_now)
# 2018-02-02 18:31:13.271231
print(type(dt_now))
# <class 'datetime.datetime'>
print(dt_now.year)
# 2018
print(dt_now.hour)
# 18
Konstruktor für datetime-Objekt
Es ist auch möglich, datetime-Objekte für beliebige Daten und Zeiten zu erzeugen.
Der Konstruktor für das datetime-Objekt lautet wie folgt.
datetime(year, month, day, hour=0, minute=0, second=0, microsecond=0, tzinfo=None)
Die folgenden Werte sind erforderlich, andere können weggelassen werden. Wenn sie weggelassen werden, ist der Standardwert 0.
year
month
day
dt = datetime.datetime(2018, 2, 1, 12, 15, 30, 2000)
print(dt)
# 2018-02-01 12:15:30.002000
print(dt.minute)
# 15
print(dt.microsecond)
# 2000
dt = datetime.datetime(2018, 2, 1)
print(dt)
# 2018-02-01 00:00:00
print(dt.minute)
# 0
Umwandlung eines datetime-Objekts in ein Datumsobjekt
Ein datetime-Objekt kann mit der Methode date() in ein Datumsobjekt umgewandelt werden, wie im Folgenden beschrieben.
print(dt_now)
print(type(dt_now))
# 2018-02-02 18:31:13.271231
# <class 'datetime.datetime'>
print(dt_now.date())
print(type(dt_now.date()))
# 2018-02-02
# <class 'datetime.date'>
Datumsobjekt
Ein Datumsobjekt ist ein Objekt, das Informationen über ein Datum (Jahr, Monat, Tag) enthält. Auf es kann über die Attribute Jahr, Monat und Tag zugegriffen werden.
date.today(): Heutiges Datum
Das Datumsobjekt des aktuellen Datums (heutiges Datum) kann mit date.today() ermittelt werden.
d_today = datetime.date.today()
print(d_today)
# 2018-02-02
print(type(d_today))
# <class 'datetime.date'>
print(d_today.year)
# 2018
Konstruktor für das Datumsobjekt
Der Konstruktor für das Datumsobjekt lautet wie folgt
date(year, month, day)
Alle sind erforderlich und können nicht weggelassen werden.
d = datetime.date(2018, 2, 1)
print(d)
# 2018-02-01
print(d.month)
# 2
Zeitobjekt
Das Zeitobjekt ist ein Objekt, das Informationen über die Zeit (Stunden, Minuten, Sekunden und Mikrosekunden) enthält. Es kann über die Attribute Stunde, Minute, Sekunde und Mikrosekunde aufgerufen werden.
Konstruktor für das Zeitobjekt
Der Konstruktor des Zeitobjekts sieht folgendermaßen aus.
time(hour=0, minute=0, second=0, microsecond=0, tzinfo=None)
Sie sind alle optional und werden, wenn sie weggelassen werden, auf 0 gesetzt.
t = datetime.time(12, 15, 30, 2000)
print(t)
# 12:15:30.002000
print(type(t))
# <class 'datetime.time'>
print(t.hour)
# 12
t = datetime.time()
print(t)
# 00:00:00
Timedelta-Objekt
Das timedelta-Objekt ist ein Objekt, das die Zeitdifferenz zwischen zwei Daten und Zeiten oder die verstrichene Zeit darstellt. Es enthält Informationen in Tagen, Sekunden und Mikrosekunden und kann über die Attribute days, seconds und microseconds aufgerufen werden. Es ist auch möglich, die Gesamtzahl der Sekunden mit der Methode total_seconds() zu ermitteln.
Subtrahieren Sie datetime- und date-Objekte, um ein timedelta-Objekt zu erstellen.
Subtrahiert man datetime-Objekte voneinander, erhält man ein timedelta-Objekt.
td = dt_now - dt
print(td)
# 1 day, 18:31:13.271231
print(type(td))
# <class 'datetime.timedelta'>
print(td.days)
# 1
print(td.seconds)
# 66673
print(td.microseconds)
# 271231
print(td.total_seconds())
# 153073.271231
Die Subtraktion von Datumsobjekten voneinander ergibt in ähnlicher Weise ein Timedelta-Objekt.
Konstruktor für das Timedelta-Objekt
Der Konstruktor des timedelta-Objekts lautet wie folgt
timedelta(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)
Sie sind alle optional und werden, wenn sie weggelassen werden, auf 0 gesetzt.
Beachten Sie, dass das timedelta-Objekt nur die folgenden Informationen enthält.
- eine Reihe von Tagen:
days
- Anzahl der Sekunden:
seconds
- Mikrosekundenzählung:
microseconds
Zum Beispiel sind die beiden folgenden gleich
weeks=1
days=7
td_1w = datetime.timedelta(weeks=1)
print(td_1w)
# 7 days, 0:00:00
print(td_1w.days)
# 7
Subtraktion und Addition mit Timedelta-Objekten
Das timedelta-Objekt kann zusammen mit den Objekten datetime und date verwendet werden, um Operationen wie Subtraktion und Addition durchzuführen. So können Sie z. B. leicht das Datum vor einer Woche oder in 10 Tagen oder die Uhrzeit in 50 Minuten berechnen und abrufen.
d_1w = d_today - td_1w
print(d_1w)
# 2018-01-26
td_10d = datetime.timedelta(days=10)
print(td_10d)
# 10 days, 0:00:00
dt_10d = dt_now + td_10d
print(dt_10d)
# 2018-02-12 18:31:13.271231
td_50m = datetime.timedelta(minutes=50)
print(td_50m)
# 0:50:00
print(td_50m.seconds)
# 3000
dt_50m = dt_now + td_50m
print(dt_50m)
# 2018-02-02 19:21:13.271231
Sie kann auch dazu verwendet werden, die Anzahl der Tage bis zu einem bestimmten Datum zu berechnen.
d_target = datetime.date(2020, 7, 24)
td = d_target - d_today
print(td)
# 903 days, 0:00:00
print(td.days)
# 903
strftime(): Umwandlung von Datum und Uhrzeit in einen String
Die Methode strftime() von datetime- und date-Objekten kann verwendet werden, um Datums- und Zeitangaben in eine Zeichenkette in einem beliebigen Format zu konvertieren.
Formatierungscode
Die verfügbaren Formatierungscodes finden Sie in der offiziellen Dokumentation weiter unten.
Die wichtigsten Formatierungscodes sind nachstehend aufgeführt.
%d
:Tag des Monats in Dezimalschreibweise mit aufgefüllter Null.%m
:Monat in Dezimalschreibweise mit aufgefüllter Null.%y
:Die letzten beiden Ziffern der Jahreszahl in Dezimaldarstellung mit Nullen.%Y
:Vier Ziffern der Jahreszahl in Dezimalschreibweise mit aufgefüllter Null.%H
:Ausgedrückt in Dezimalschreibweise mit aufgefüllter Null (24-Stunden-Schreibweise)%I
:In Dezimalschreibweise mit aufgefüllten Nullen (12-Stunden-Schreibweise)%M
:Für die Dezimalschreibweise mit aufgefüllter Null.%S
:Sekunden in Dezimalschreibweise mit aufgefüllter Null.%f
:Mikrosekunden (6 Ziffern) in Dezimalschreibweise mit 0 aufgefüllt.%A
:Name des Wochentags für das Gebietsschema%a
:Name des Tages für den Ort (abgekürzte Form)%B
:Lokaler Monatsname%b
:Lokaler Monatsname (abgekürzte Form)%j
:Tag des Jahres in Dezimalschreibweise mit Nullfüllung.%U
:Wochennummer des Jahres in Dezimalschreibweise mit Nullfüllung (die Woche beginnt am Sonntag)%W
:Wochennummer des Jahres in Dezimalschreibweise mit Nullfüllung (die Woche beginnt am Montag)
Die folgenden Formatierungscodes für Tages- und Monatsnamen können je nach Gebietsschema in verschiedenen Zeichenfolgen erhalten werden.
%A
%a
%B
%b
Es gibt auch eine spezielle Methode für Zeichenketten im ISO 8601-Format.
Beispiel-Code
print(dt_now.strftime('%Y-%m-%d %H:%M:%S'))
# 2018-02-02 18:31:13
print(d_today.strftime('%y%m%d'))
# 180202
print(d_today.strftime('%A, %B %d, %Y'))
# Friday, February 02, 2018
print('Day number (how many days in a year / January 1 is 001):', d_today.strftime('%j'))
print('Week number (the week starts on Sunday / New Year's Day is 00):', d_today.strftime('%U'))
print('Week number (the week begins on Monday / New Year's Day is 00):', d_today.strftime('%W'))
# Day number (how many days in a year / January 1 is 001): 033
# Week number (the week starts on Sunday / New Year's Day is 00): 04
# Week number (the week begins on Monday / New Year's Day is 00): 05
Wenn Sie statt einer Zeichenkette eine Zahl erhalten möchten, wandeln Sie sie einfach mit int() in eine Ganzzahl um.
week_num_mon = int(d_today.strftime('%W'))
print(week_num_mon)
print(type(week_num_mon))
# 5
# <class 'int'>
In Kombination mit dem timedelta-Objekt ist es einfach, z. B. eine Liste von zweiwöchentlichen Terminen in einem beliebigen Format zu erstellen.
d = datetime.date(2018, 2, 1)
td = datetime.timedelta(weeks=2)
n = 8
f = '%Y-%m-%d'
l = []
for i in range(n):
l.append((d + i * td).strftime(f))
print(l)
# ['2018-02-01', '2018-02-15', '2018-03-01', '2018-03-15', '2018-03-29', '2018-04-12', '2018-04-26', '2018-05-10']
print('\n'.join(l))
# 2018-02-01
# 2018-02-15
# 2018-03-01
# 2018-03-15
# 2018-03-29
# 2018-04-12
# 2018-04-26
# 2018-05-10
Die Verwendung der Notation für das Listenverständnis ist klüger.
l = [(d + i * td).strftime(f) for i in range(n)]
print(l)
# ['2018-02-01', '2018-02-15', '2018-03-01', '2018-03-15', '2018-03-29', '2018-04-12', '2018-04-26', '2018-05-10']
- Verwandte Artikel:Verwendung der Python-Notation für Listenauflösungen
strptime(): Umwandlung von String in Datum und Uhrzeit
datetime strptime() kann verwendet werden, um ein datetime-Objekt aus einer Datums- oder Zeitzeichenfolge zu erstellen. Es ist notwendig, die Formatierungszeichenfolge anzugeben, die der ursprünglichen Zeichenfolge entspricht.
Es gibt auch eine spezielle Methode für ISO 8601-Strings (Python 3.7 oder höher).
Beispiel-Code
date_str = '2018-2-1 12:30'
date_dt = datetime.datetime.strptime(date_str, '%Y-%m-%d %H:%M')
print(date_dt)
# 2018-02-01 12:30:00
print(type(date_dt))
# <class 'datetime.datetime'>
Mit der Methode strftime() können Sie das Datum und die Uhrzeit in einem anderen Format als der ursprünglichen Zeichenkette darstellen.
print(date_dt.strftime('%Y-%m-%d %H:%M'))
# 2018-02-01 12:30
Wenn Sie es in ein datetime-Objekt umwandeln, können Sie auch Operationen mit timedelta-Objekten durchführen, so dass Sie z. B. eine Zeichenkette für ein Datum vor 10 Tagen im gleichen Format erzeugen können.
date_str = '2018-2-1'
date_format = '%Y-%m-%d'
td_10_d = datetime.timedelta(days=10)
date_dt = datetime.datetime.strptime(date_str, date_format)
date_dt_new = date_dt - td_10_d
date_str_new = date_dt_new.strftime(date_format)
print(date_str_new)
# 2018-01-22