Я пытаюсь сделать что-то вроде этого:
time() + timedelta(hours=1)
однако Python не позволяет этого , по-видимому, по уважительной причине.
У кого-нибудь есть простой обходной путь?
Я пытаюсь сделать что-то вроде этого:
time() + timedelta(hours=1)
однако Python не позволяет этого , по-видимому, по уважительной причине.
У кого-нибудь есть простой обходной путь?
Решение находится по ссылке, которую вы указали в своем вопросе:
datetime.combine(date.today(), time()) + timedelta(hours=1)
Полный пример:
from datetime import date, datetime, time, timedelta
dt = datetime.combine(date.today(), time(23, 55)) + timedelta(minutes=30)
print dt.time()
Вывод:
00:25:00
today()
перед переходом на летнее время наступит день, а timedelta перейдет в другой часовой пояс? На этот код влияют локали?date.today()
используется для поддержки как положительных, так и отрицательных временных дельт.date.min
будет работать для положительных timedeltas.datetime.MAXYEAR
что 9999 останется в 9999.Если в ваш проект стоит добавить еще один файл / зависимость, я только что написал крошечный класс, который расширяется
datetime.time
за счет возможности выполнять арифметические операции. Если вы пройдете за полночь, он просто обернется вокруг:>>> 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'
Он доступен в PyPi как
nptime
(« непедантичное время») или на GitHub: https://github.com/tgs/nptimeДокументация находится на http://tgs.github.io/nptime/
источник
Это немного неприятно, но:
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
модуля. В противном случае потребуется обрабатывать ошибки переполнения и тому подобное вручную.Обходной путь:
t = time() t2 = time(t.hour+1, t.minute, t.second, t.microsecond)
Вы также можете опустить микросекунды, если вам не нужна такая точность.
источник
t == time(23,59)
тогда этот подход не сработает. Когда вы добавите1
к,t.hour
вы получитеValueError: hour must be in 0..23
datetime.timedelta(days=1)
для добавления дня к объекту datetime. Вы избежите отладки.Вы можете изменить time () на now (), чтобы он работал
from datetime import datetime, timedelta datetime.now() + timedelta(hours=1)
источник