【发布时间】:2020-06-11 02:51:50
【问题描述】:
我想创建一个日期列表,在某个年份范围内每年选择相同的日期。
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
这个输出:
[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)]
但当我将日期更改为 2 月 29 日之后,闰年的日期会偏移一天。
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)]
这是什么原因,我该如何解决?
【问题讨论】:
-
为什么是时间增量?如果您只想要每年的特定日期,为什么不专门创建呢?
-
不知道如何实现,这就是我尝试使用 timedelta 的原因。
-
除了之前的 cmets,我建议使用
date.replace(year = date.year + 1)之类的东西,而不是手动执行此操作(例如,请参阅 this question) -
@EliTurasky
dt.date(current_date.year + 1, start_date.month, start_date.day) -
哦,我明白了。感谢这些 cmets。