por nacimiento manejo horas formato fechas fecha entre edad diferencia dias contar comparar calcular aritmética python datetime

python - nacimiento - Imprime todas las fechas del día entre dos fechas



manejo y aritmética de fechas en python (5)

Esta pregunta ya tiene una respuesta aquí:

Por ejemplo:

from datetime import date d1 = date(2008,8,15) d2 = date(2008,9,15)

Estoy buscando un código simple para imprimir todas las fechas intermedias:

2008,8,15 2008,8,16 2008,8,17 ... 2008,9,14 2008,9,15

Gracias


Esencialmente lo mismo que la respuesta de Gringo Suave, pero con un generador:

from datetime import datetime, timedelta def datetime_range(start=None, end=None): span = end - start for i in xrange(span.days + 1): yield start + timedelta(days=i)

Entonces puedes usarlo de la siguiente manera:

In: list(datetime_range(start=datetime(2014, 1, 1), end=datetime(2014, 1, 5))) Out: [datetime.datetime(2014, 1, 1, 0, 0), datetime.datetime(2014, 1, 2, 0, 0), datetime.datetime(2014, 1, 3, 0, 0), datetime.datetime(2014, 1, 4, 0, 0), datetime.datetime(2014, 1, 5, 0, 0)]

O así:

In []: for date in datetime_range(start=datetime(2014, 1, 1), end=datetime(2014, 1, 5)): ...: print date ...: 2014-01-01 00:00:00 2014-01-02 00:00:00 2014-01-03 00:00:00 2014-01-04 00:00:00 2014-01-05 00:00:00


Se me ocurrió esto:

from datetime import date, timedelta d1 = date(2008, 8, 15) # start date d2 = date(2008, 9, 15) # end date delta = d2 - d1 # timedelta for i in range(delta.days + 1): print(d1 + timedelta(days=i))

La salida:

2008-08-15 2008-08-16 ... 2008-09-13 2008-09-14 2008-09-15

Tu pregunta requiere fechas intermedias, pero creo que quisiste incluir los puntos de inicio y finalización, por lo que están incluidos. Para eliminar la fecha de finalización, elimine el +1 al final del ciclo for. Para eliminar la fecha de inicio, agregue un 1 al comienzo de la función de rango.


Usando una lista de comprensión:

from datetime import date, timedelta d1 = date(2008,8,15) d2 = date(2008,9,15) # this will give you a list containing all of the dates dd = [d1 + timedelta(days=x) for x in range((d2-d1).days + 1)] for d in dd: print d # you can''t join dates, so if you want to use join, you need to # cast to a string in the list comprehension: ddd = [str(d1 + timedelta(days=x)) for x in range((d2-d1).days + 1)] # now you can join print "/n".join(ddd)


import datetime begin = datetime.date(2008, 8, 15) end = datetime.date(2008, 9, 15) next_day = begin while True: if next_day > end: break print next_day next_day += datetime.timedelta(days=1)


import datetime d1 = datetime.date(2008,8,15) d2 = datetime.date(2008,9,15) diff = d2 - d1 for i in range(diff.days + 1): print (d1 + datetime.timedelta(i)).isoformat()