Ich versuche so etwas zu tun:
time() + timedelta(hours=1)
jedoch Python nicht erlaubt es , offenbar aus gutem Grund.
Hat jemand eine einfache Lösung?
Ich versuche so etwas zu tun:
time() + timedelta(hours=1)
jedoch Python nicht erlaubt es , offenbar aus gutem Grund.
Hat jemand eine einfache Lösung?
Antworten:
Die Lösung finden Sie in dem Link, den Sie in Ihrer Frage angegeben haben:
datetime.combine(date.today(), time()) + timedelta(hours=1)
Vollständiges Beispiel:
from datetime import date, datetime, time, timedelta
dt = datetime.combine(date.today(), time(23, 55)) + timedelta(minutes=30)
print dt.time()
Ausgabe:
00:25:00
date.today()
wird verwendet, um sowohl positive als auch negative Zeitpläne zu unterstützen. date.min
würde für positive Zeitpläne arbeiten.
datetime.MAXYEAR
, dass 9999 in 9999 bleiben wird.
Wenn es sich lohnt, Ihrem Projekt eine weitere Datei / Abhängigkeit hinzuzufügen, habe ich gerade eine kleine Klasse geschrieben, die sich datetime.time
mit der Fähigkeit zum Rechnen erweitert. Wenn Sie nach Mitternacht gehen, dreht es sich nur um:
>>> from nptime import nptime
>>> from datetime import timedelta
>>> afternoon = nptime(12, 24) + timedelta(days=1, minutes=36)
>>> afternoon
nptime(13, 0)
>>> str(afternoon)
'13:00:00'
Es ist bei PyPi als nptime
("nicht pedantische Zeit") oder auf GitHub erhältlich: https://github.com/tgs/nptime
Die Dokumentation finden Sie unter http://tgs.github.io/nptime/
Das ist ein bisschen böse, aber:
from datetime import datetime, timedelta
now = datetime.now().time()
# Just use January the first, 2000
d1 = datetime(2000, 1, 1, now.hour, now.minute, now.second)
d2 = d1 + timedelta(hours=1, minutes=23)
print d2.time()
datetime
Modul. Andernfalls müssten Überlauffehler und dergleichen manuell behandelt werden.
Problemumgehung:
t = time()
t2 = time(t.hour+1, t.minute, t.second, t.microsecond)
Sie können die Mikrosekunden auch weglassen, wenn Sie nicht so viel Präzision benötigen.
t == time(23,59)
dann dieser Ansatz nicht funktioniert. Wenn Sie hinzufügen 1
, erhalten t.hour
SieValueError: hour must be in 0..23
datetime.timedelta(days=1)
einem Datum / Uhrzeit-Objekt einen Tag hinzufügen. Sie vermeiden Debug-Land.
today()
der Tag vor der Umstellung auf Sommerzeit liegt und sich das Zeitdelta in die andere Zeitzone erstreckt? Ist dieser Code von Gebietsschemas betroffen?