Не совсем очевидно, почему нужно было бы объединить (десятичные) значения «ascii». Несомненно, что объединение их без ведущих нулей (или какого-либо другого дополнения или разделителя) бесполезно - ничто не может быть надежно восстановлено из такого выхода.
>>> tests = ["hi", "Hi", "HI", '\x0A\x29\x00\x05']
>>> ["".join("%d" % ord(c) for c in s) for s in tests]
['104105', '72105', '7273', '104105']
Обратите внимание, что первые 3 выхода разной длины. Обратите внимание, что четвертый результат совпадает с первым.
>>> ["".join("%03d" % ord(c) for c in s) for s in tests]
['104105', '072105', '072073', '010041000005']
>>> [" ".join("%d" % ord(c) for c in s) for s in tests]
['104 105', '72 105', '72 73', '10 41 0 5']
>>> ["".join("%02x" % ord(c) for c in s) for s in tests]
['6869', '4869', '4849', '0a290005']
>>>
Не замечайте таких проблем.
Решение находится в ссылке, которую вы предоставили в своем вопросе:
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
Это немного неприятно, но:
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
. В противном случае это потребует обработки ошибок переполнения и такого вручную.
– jfs
18 March 2009 в 00:25
Вы можете изменить время () на теперь (), чтобы он работал
from datetime import datetime, timedelta
datetime.now() + timedelta(hours=1)
Если стоит добавить другой файл / зависимость в ваш проект, я только что написал маленький класс, который расширяет 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/
Обход проблемы:
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
– jfs
18 March 2009 в 00:20
today()
за день до перехода на летнее время, а timedelta - в другой часовой пояс? Является ли этот код затронутым локалями? – bluenote10 4 April 2017 в 20:46date.today()
используется для поддержки как положительных, так и отрицательных timedeltas.date.min
будет работать на положительные timedeltas. – jfs 5 April 2017 в 07:03datetime.MAXYEAR
останется 9999 в 9999 году. – jfs 5 April 2017 в 07:31