【问题标题】:python parse date string with out of range days without errorpython解析日期字符串超出范围天数而没有错误
【发布时间】:2020-06-04 17:55:32
【问题描述】:

我想解析一个日期字符串并处理年、月、日,以防我得到月或日的“00”,或者我得到的一天超出了该年/月的可能天数。给定一个“2012-00-00”或“2020-02-31”,我得到一个 ValueError。我想要的是捕捉错误,然后将前者变为“2012-01-01”,将后者变为“2020-02-29”。目前在 Google 上没有结果。

澄清:我使用 try/except/ValueError... 我想要的是解析出年、月、日并修复出现 ValueError 的日或月...而无需编写解析代码和我自己的正则表达式......这违背了使用库开始的目的。

# Try dateutjil
blah = dateutil.parser.parse(date_string, fuzzy=True)
print(blah)

# Try datetime
date_object = datetime.strptime(date_string, date_format)
return_date_string = date_object.date().strftime('%Y-%m-%d')

【问题讨论】:

标签: python datetime python-dateutil


【解决方案1】:

我知道您不想自己解析日期,但我认为您可能必须这样做。一种选择是将传入的字符串拆分为其组成的年、月和日部分,并根据有效值检查它们,并根据需要进行调整。然后,您可以从中创建一个 date 并调用 strftime 以获取有效的日期字符串:

from datetime import datetime, date
import calendar

def parse_date(dt):
    [y, m, d] = map(int, dt.split('-'))
    # optional error checking on y
    # ...
    # check month
    m = 1 if m == 0 else 12 if m > 12 else m
    # check day
    last = calendar.monthrange(y, m)[-1]
    d = 1 if d == 0 else last if d > last else d
    return date(y, m, d).strftime('%Y-%m-%d')


print(parse_date('2012-00-00'))
print(parse_date('2020-02-31'))

输出:

2012-01-01
2020-02-29

【讨论】:

    猜你喜欢
    • 2015-01-19
    • 1970-01-01
    • 2019-09-19
    • 2012-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多