Python dateutil日期转换

时间:2015-10-13 02:47:41

标签: python python-dateutil

我试图查看日期列表是否为有效日期。我正在使用dateutil库,但我得到了奇怪的结果。例如,当我尝试以下操作时:

import dateutil.parser as parser
x = '10/84'
date = (parser.parse(x))
print(date.isoformat())

我得到结果1984-10-12T00:00:00这是错误的。有谁知道为什么这个12被添加到日期?

2 个答案:

答案 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')