Какой самый короткий способ узнать, сколько дней прошло два дня? Вот что я делаю сейчас.
math.floor((b - a).total_seconds()/float(86400))
Какой самый короткий способ узнать, сколько дней прошло два дня? Вот что я делаю сейчас.
math.floor((b - a).total_seconds()/float(86400))
Предполагая, что вы буквально получили два объекта даты, вы можете вычесть одно из другого и запросить полученный timedelta
объект за количество дней
>>> from datetime import date
>>> a = date(2011,11,24)
>>> b = date(2011,11,17)
>>> a-b
datetime.timedelta(7)
>>> (a-b).days
7
И он тоже работает с датами - думаю, округляется до ближайшего дня:
>>> from datetime import datetime
>>> a = datetime(2011,11,24,0,0,0)
>>> b = datetime(2011,11,17,23,59,59)
>>> a-b
datetime.timedelta(6, 1)
>>> (a-b).days
6
Вы имеете в виду полные календарные дни или группы в течение 24 часов?
Всего за 24 часа, предполагая, что вы используете дату и время Python, объект timedelta уже имеет свойство days:
days = (a - b).days
Для календарных дней вам нужно округлить до ближайшего дня, а b до ближайшего дня, избавившись от частичного дня с обеих сторон:
roundedA = a.replace(hour = 0, minute = 0, second = 0, microsecond = 0)
roundedB = b.replace(hour = 0, minute = 0, second = 0, microsecond = 0)
days = (roundedA - roundedB).days
Try:
(b-a).days
Я попробовал с b и a типа datetime.date
.
Ссылка на мои комментарии к другим ответам. Вот как я мог бы разобраться в разнице в днях на основе 24 часов и календарных дней. атрибут days работает хорошо в течение 24 часов, и функция работает лучше всего для проверки календаря.
from datetime import timedelta, datetime
def cal_days_diff(a,b):
A = a.replace(hour = 0, minute = 0, second = 0, microsecond = 0)
B = b.replace(hour = 0, minute = 0, second = 0, microsecond = 0)
return (A - B).days
if __name__ == '__main__':
x = datetime(2013, 06, 18, 16, 00)
y = datetime(2013, 06, 19, 2, 00)
print (y - x).days # 0
print cal_days_diff(y, x) # 1
z = datetime(2013, 06, 20, 2, 00)
print (z - x).days # 1
print cal_days_diff(z, x) # 2