【问题标题】:Handling invalid datetimes处理无效的日期时间
【发布时间】: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 的建议添加一天直到达到结束日期是有意义的

标签: python datetime


【解决方案1】:

使用 try/except 块来捕获异常。

for day in range(1,32):
    try:
        current_date = dt.datetime(year,month,day)
    except ValueError:
        # once we reach an invalid day, any following
        # days are also invalid, so stop the day loop
        break
    if(is_valid_day(current_date)):
        valid_days.append(current_date)

【讨论】:

    猜你喜欢
    • 2018-03-31
    • 2014-05-20
    • 2012-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-13
    相关资源
    最近更新 更多