我想解析日期字符串,并在月份或日期获得'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')
我知道您不想自己解析日期,但我认为您可能必须这样做。一种选择是将输入的字符串分为年,月和日部分,并根据有效值检查它们,并根据需要进行调整。然后,您可以从中创建一个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