I want to create a list of dates that selects the same date every year over a range of years.
start_date = dt.date(2009, 2, 10)
end_date = dt.date(2019, 5, 1)
new_date = []
current_date = start_date
while current_date < end_date:
if (current_date.year % 4) == 0:
new_date.append(current_date + dt.timedelta(days=366))
else:
new_date.append(current_date + dt.timedelta(days=365))
if (current_date.year % 4) == 0:
current_date += dt.timedelta(days=366)
else:
current_date += dt.timedelta(days=365)
new_date
This outputs:
[datetime.date(2010, 2, 10),
datetime.date(2011, 2, 10),
datetime.date(2012, 2, 10),
datetime.date(2013, 2, 10),
datetime.date(2014, 2, 10),
datetime.date(2015, 2, 10),
datetime.date(2016, 2, 10),
datetime.date(2017, 2, 10),
datetime.date(2018, 2, 10),
datetime.date(2019, 2, 10),
datetime.date(2020, 2, 10)]
But when I change the day to be after the February 29, the leap years have the dates offset by one day.
start_date = dt.date(2009, 3, 10)
end_date = dt.date(2019, 5, 1)
new_date = []
current_date = start_date
while current_date < end_date:
if (current_date.year % 4) == 0:
new_date.append(current_date + dt.timedelta(days=366))
else:
new_date.append(current_date + dt.timedelta(days=365))
if (current_date.year % 4) == 0:
current_date += dt.timedelta(days=366)
else:
current_date += dt.timedelta(days=365)
new_date
[datetime.date(2010, 3, 10),
datetime.date(2011, 3, 10),
datetime.date(2012, 3, 9),
datetime.date(2013, 3, 10),
datetime.date(2014, 3, 10),
datetime.date(2015, 3, 10),
datetime.date(2016, 3, 9),
datetime.date(2017, 3, 10),
datetime.date(2018, 3, 10),
datetime.date(2019, 3, 10),
datetime.date(2020, 3, 9)]
What is the reason for this and how do I fix it?