Самый чистый и самый Питонический способ получить завтрашнюю дату?
каков самый чистый и самый Питонический способ получить завтрашнюю дату? Должен быть лучший способ, чем добавить один в день, обрабатывать дни в конце месяца и т. д.
4 ответа:
timedelta
может обрабатывать добавление дней, секунд, микросекунд, миллисекунд, минут, часов или недель.>>> import datetime >>> today = datetime.date.today() >>> today datetime.date(2009, 10, 1) >>> today + datetime.timedelta(days=1) datetime.date(2009, 10, 2) >>> datetime.date(2009,10,31) + datetime.timedelta(hours=24) datetime.date(2009, 11, 1)
как и просили в комментарии, високосные дни не представляют никакой проблемы:
>>> datetime.date(2004, 2, 28) + datetime.timedelta(days=1) datetime.date(2004, 2, 29) >>> datetime.date(2004, 2, 28) + datetime.timedelta(days=2) datetime.date(2004, 3, 1) >>> datetime.date(2005, 2, 28) + datetime.timedelta(days=1) datetime.date(2005, 3, 1)
нет обращения високосных секунд tho:
>>> from datetime import datetime, timedelta >>> dt = datetime(2008,12,31,23,59,59) >>> str(dt) '2008-12-31 23:59:59' >>> # leap second was added at the end of 2008, >>> # adding one second should create a datetime >>> # of '2008-12-31 23:59:60' >>> str(dt+timedelta(0,1)) '2009-01-01 00:00:00' >>> str(dt+timedelta(0,2)) '2009-01-01 00:00:01'
штопать.
EDIT - @Mark: документы говорят "Да", но код говорит"не так много":
>>> time.strptime("2008-12-31 23:59:60","%Y-%m-%d %H:%M:%S") (2008, 12, 31, 23, 59, 60, 2, 366, -1) >>> time.mktime(time.strptime("2008-12-31 23:59:60","%Y-%m-%d %H:%M:%S")) 1230789600.0 >>> time.gmtime(time.mktime(time.strptime("2008-12-31 23:59:60","%Y-%m-%d %H:%M:%S"))) (2009, 1, 1, 6, 0, 0, 3, 1, 0) >>> time.localtime(time.mktime(time.strptime("2008-12-31 23:59:60","%Y-%m-%d %H:%M:%S"))) (2009, 1, 1, 0, 0, 0, 3, 1, 0)
Я думаю, что gmtime или localtime примет значение, возвращенное mktime, и вернет мне исходный кортеж, с 60 в качестве количества секунд. И этот тест показывает, что эти прыжковые секунды могут просто исчезнуть...
>>> a = time.mktime(time.strptime("2008-12-31 23:59:60","%Y-%m-%d %H:%M:%S")) >>> b = time.mktime(time.strptime("2009-01-01 00:00:00","%Y-%m-%d %H:%M:%S")) >>> a,b (1230789600.0, 1230789600.0) >>> b-a 0.0