¿Cuál es la forma más corta de ver cuántos días completos han pasado entre dos fechas? Esto es lo que estoy haciendo ahora.Días entre dos fechas en Python
math.floor((b - a).total_seconds()/float(86400))
¿Cuál es la forma más corta de ver cuántos días completos han pasado entre dos fechas? Esto es lo que estoy haciendo ahora.Días entre dos fechas en Python
math.floor((b - a).total_seconds()/float(86400))
Suponiendo que hemos literalmente, tiene dos objetos de fecha, puede restar una de la otra y consultar el timedelta
object resultante para el número de días:
>>> from datetime import date
>>> a = date(2011,11,24)
>>> b = date(2011,11,17)
>>> a-b
datetime.timedelta(7)
>>> (a-b).days
7
y funciona con datetimes también - creo que redondea a la baja hasta el día más cercana:
>>> 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
Coolness. De alguna manera siempre asumí que "días" se refiere a la porción del día de la diferencia. Entonces, por ejemplo, la diferencia entre 2010 y 2011 sería de 0 días y 1 año, pero resulta que sí informa los 365 días que yo quería. – Bemmu
@Bemmu: ah sí - Creo que 'timedelta' no informa ninguna unidad por más de días (aunque podría estar equivocado). –
Probar:
(b-a).days
He intentado con b y uno del tipo datetime.date
.
¿Te refieres a días calendario completos, o grupos de 24 horas?
por el simple hecho de 24 horas, asumiendo que usted está utilizando la fecha y hora de Python, entonces el objeto timedelta ya tiene un día propiedad:
days = (a - b).days
Por días naturales, que necesita para redondear un día a la más cercana y b hasta el día cercano, la eliminación de la jornada parcial en cualquier lado:
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
buen lugar con la diferencia en días de calendario frente a 24 horas. Una pregunta es por qué agregas 1 día. Creo que lo anterior funciona perfectamente sin eso. –
Ese es el cheque por días calendario. Diga A es 2013-06-18 a las 16:00 y B es 2013-06-19 a las 02:00; un día calendario ha pasado, pero (B - A) .days devolverá cero porque el delta es de solo 10 horas. – DNS
Ese es el punto que estoy haciendo DNS. Tu código devuelve 2 porque has agregado otro día. Sin agregar 1 día, devuelve 1. ¿Por qué agregar un día? –
referencia a mis comentarios sobre otras respuestas. Así es como calcularía la diferencia en días en base a 24 horas y días de calendario. el atributo de días funciona bien durante 24 horas y la función funciona mejor para las verificaciones del calendario.
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
¿Son solo dos fechas, o también incluyen información de tiempo? –
Ah - vea también http://stackoverflow.com/questions/151199/how-do-i-calculate-number-of-days-betwen-two-dates-using-python –