ray*_*ith 5 python python-dateutil
我想看看日期列表是否是有效日期.我正在使用dateutil库,但我得到了奇怪的结果.例如,当我尝试以下操作时:
import dateutil.parser as parser
x = '10/84'
date = (parser.parse(x))
print(date.isoformat())
Run Code Online (Sandbox Code Playgroud)
我得到的结果1984-10-12T00:00:00是错的.有谁知道为什么这12会被添加到日期?
该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
Run Code Online (Sandbox Code Playgroud)
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')
Run Code Online (Sandbox Code Playgroud)