【发布时间】:2021-12-11 22:33:45
【问题描述】:
有没有一种简单的方法可以将“11 月 31 日”等无效日期减少到该月的最后一个有效日期? 11 月 31 日不存在,因为 11 月没有 31 天。
我正在使用的日期字符串非常混乱且不一致,因此我想避免尝试对字符串进行切片或类似的事情。当日期不无效时,Parser.parse() 非常适合我的用例。
from dateutil import parser
datstrings_list = ["Nov 31, 1976", "11/31/76", "11/31/1976", "November 31st, 1976","1/32/1976"]
date_list = []
for i in datestrings_list:
datestring = i
date = parser.parse(datestring).date()
date_list.append(date)
创建错误:
ParserError: day is out of range for month: Nov 31, 1976
date_list 的期望值:
[datetime.date(1976, 11, 30), datetime.date(1976, 11, 30),datetime.date(1976, 11, 30),datetime.date(1976, 11, 30), datetime.date(1/31/1976)]
【问题讨论】:
-
很好奇,为什么你的日期无效?
-
杂乱无章的数据超出我的控制——日期是在代码过程之外提供的。
-
数据有多“不一致”?正则表达式可能会有所帮助:
re.findall(r"\d+", "Nov 31, 1976")返回['31', '1976']。 -
在try里面做一下,抓到错误,然后改值再尝试解析?
-
日期有各种不同的格式 -- m/d/yy -- mm/dd/yyyy -- 像在代码中一样写出来 -- 可能有一种方法可以做很多正则表达式在众多尝试语句中,但我希望有更好的解决方案。
标签: python string date parsing