Я намагаюся зробити щось подібне:
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
date.today()
використовується для підтримки як позитивних, так і негативних термінів. date.min
буде працювати на позитивні терміни.
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. Ви уникнете землі налагодження.
today()
за день до переходу на літній час перейти на літній час, а часовий пояс переходить у інший часовий пояс? Чи впливає на цей код локалі?