Самый чистый и самый питонский способ получить завтрашнее свидание?

Какой самый чистый и самый питонский способ получить завтрашнее свидание? Должен быть лучший способ, чем добавить один в день, обработать дни в конце месяца и т. Д.

80 голосов | спросил linkmaster03 2 +04002009-10-02T02:45:11+04:00312009bEurope/MoscowFri, 02 Oct 2009 02:45:11 +0400 2009, 02:45:11

4 ответа


0

datetime.date.today() + datetime.timedelta(days=1) должно помочь

ответил Kamil Szot 2 +04002009-10-02T02:49:11+04:00312009bEurope/MoscowFri, 02 Oct 2009 02:49:11 +0400 2009, 02:49:11
0

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)
ответил Mark Rushakoff 2 +04002009-10-02T02:49:24+04:00312009bEurope/MoscowFri, 02 Oct 2009 02:49:24 +0400 2009, 02:49:24
0

Нет обработки високосных секунд , хотя:

>>> 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'

штопка.

РЕДАКТИРОВАТЬ - @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
ответил PaulMcG 2 +04002009-10-02T03:45:34+04:00312009bEurope/MoscowFri, 02 Oct 2009 03:45:34 +0400 2009, 03:45:34
0

Даже базовый модуль time может справиться с этим:

import time
time.localtime(time.time() + 24*3600)
ответил u0b34a0f6ae 2 +04002009-10-02T03:58:15+04:00312009bEurope/MoscowFri, 02 Oct 2009 03:58:15 +0400 2009, 03:58:15

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132