我试图查看日期列表是否为有效日期。我正在使用dateutil库,但我得到了奇怪的结果。例如,当我尝试以下操作时:
import dateutil.parser as parser
x = '10/84'
date = (parser.parse(x))
print(date.isoformat())
我得到结果1984-10-12T00:00:00
这是错误的。有谁知道为什么这个12
被添加到日期?
答案 0 :(得分:6)
parse()
方法使用解析的信息解析字符串并更新默认的datetime
对象。如果default
未传递到此函数,则它使用today
的第一秒。
这意味着结果中的 12 是今天(当您运行代码时),只有年份和月份会从解析字符串中更新。
如果你需要解析日期字符串,但是你不确定它是否是一个有效的日期值,那么你可以使用try ... except
块来捕获解析错误。
import dateutil.parser as parser
x = '10/84'
try:
date = (parser.parse(x))
print(date.isoformat())
except ValueError as err:
pass # handle the error
答案 1 :(得分:1)
12
是当前日期。 dateutil
将当前日期/时间的组件记入日期中缺少的日期或年份(该月份不会执行此操作,仅限日期或年份)。就像另一个例子一样,日期就像 - Janauary 20
- 这将被解析为2015/01/12
从现在的日期时间算起2015年。
可悲的是,我还没有找到任何阻止这种行为的选择。
我认为最适合您的方法是提供您期望的有效日期时间格式列表,然后手动尝试使用datetime.datetime.strptime,除了ValueError。示例 -
def isdate(dt, fmt):
try:
datetime.datetime.strptime(dt, fmt)
return True
except ValueError:
return False
validformats = [...]
dates =[...]
for x in dates:
if any(isdate(x,fmt) for fmt in validformats):
print(x, 'is valid date')