【发布时间】:2019-06-09 19:53:57
【问题描述】:
我有一个函数可以在特定日期返回 True 或 False。 我想使用该函数构建一个包含自 2002 年以来所有真实日期的列表。
我试过了:
import datetime as dt
valid_days = []
for year in range(2002,2018):
for month in range(1,13):
for day in range(1,32):
current_date = dt.datetime(year,month,day)
if(is_valid_day(current_date)):
valid_days.append(current_date)
但是,这意味着例如在 2 月尝试了第 30 天的日期时间,我收到以下错误:
----> 5 current_date = dt.datetime(year,month,day)
ValueError: day is out of range for month
如何以pythonic、易于实现的方式处理?想法是跳过没有意义的日期组合(例如 2 月 30 日或 4 月 31 日)。注意:清晰易读的代码比性能更重要。
【问题讨论】:
-
选择开始日期,选择结束日期,计算出天数的差异,将开始日期增加 1 天,直到到达结束日期。见stackoverflow.com/a/3240486/4349415
-
我选择了 John 的答案,因为它与使用 for 循环更相关,但是按照 Mike 的建议添加一天直到达到结束日期是有意义的