我想确认一组日期是否为有效日期。我正在使用dateutil库,但是结果很奇怪。例如,当我尝试以下操作时:
import dateutil.parser as parser
x = '10/84'
date = (parser.parse(x))
print(date.isoformat())
我得到了错误的结果1984-10-12T00:00:00
,有人知道为什么这个12
被加到日期里了吗?
我想确认一组日期是否为有效日期。我正在使用dateutil库,但是结果很奇怪。例如,当我尝试以下操作时:
import dateutil.parser as parser
x = '10/84'
date = (parser.parse(x))
print(date.isoformat())
我得到了错误的结果1984-10-12T00:00:00
,有人知道为什么这个12
被加到日期里了吗?
parse()
方法解析字符串并更新默认的 datetime
对象,使用解析得来的信息。如果没有传递 default
到这个函数中,它会使用今天的第一秒作为默认值。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
ValueError
异常。因此,您可以将代码放入 try ... except
块中以捕获错误。 - farzad12
是当前日期。 dateutil
从当前日期/时间中获取组件,以解决日期或年份缺失的问题(对于月份不执行此操作,仅适用于日期或年份)。另一个示例是像January 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')