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í:
- Iterando a través de una variedad de fechas en Python 16 respuestas
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()