在Python中解析datetime。。?

在Python中解析datetime。。?,python,datetime,format,Python,Datetime,Format,我有一个系统(用Python开发),它接受日期时间作为各种格式的字符串,我必须解析它们。目前日期时间字符串格式有: Fri Sep 25 18:09:49 -0500 2009 2008-06-29T00:42:18.000Z 2011-07-16T21:46:39Z 1294989360 现在我需要一个通用解析器,它可以将这些日期时间格式转换为适当的日期时间对象 否则,我必须单独解析它们。所以请同时提供单独解析它们的方法(如果没有通用解析器) 您应该查看该软件包。正如@TimPietz

我有一个系统(用Python开发),它接受日期时间作为各种格式的字符串,我必须解析它们。目前日期时间字符串格式有:

Fri Sep 25 18:09:49 -0500 2009

2008-06-29T00:42:18.000Z

2011-07-16T21:46:39Z

1294989360
现在我需要一个通用解析器,它可以将这些日期时间格式转换为适当的日期时间对象


否则,我必须单独解析它们。所以请同时提供单独解析它们的方法(如果没有通用解析器)

您应该查看该软件包。

正如@TimPietzcker所建议的,dateutil软件包是一个不错的选择,它可以正确自动地处理前3种格式:

>>> from dateutil.parser import parse
>>> parse("Fri Sep 25 18:09:49 -0500 2009")
datetime.datetime(2009, 9, 25, 18, 9, 49, tzinfo=tzoffset(None, -18000))
>>> parse("2008-06-29T00:42:18.000Z")
datetime.datetime(2008, 6, 29, 0, 42, 18, tzinfo=tzutc())
>>> parse("2011-07-16T21:46:39Z")
datetime.datetime(2011, 7, 16, 21, 46, 39, tzinfo=tzutc())
unixtime格式似乎有问题,但幸运的是,标准的
datetime.datetime
已经可以执行此任务了:

>>> from datetime import datetime
>>> datetime.utcfromtimestamp(float("1294989360"))
datetime.datetime(2011, 1, 14, 7, 16)
利用此函数创建一个处理所有4种格式的函数相当容易:

from dateutil.parser import parse
from datetime import datetime

def parse_time(s):
    try:
        ret = parse(s)
    except ValueError:
        ret = datetime.utcfromtimestamp(s)
    return ret

尤其是
dateutil.parser.parse()
thanx的答案。。!!。。但有一件事..“dateutil.parser.parse”正在解析前3种日期格式..但它无法解析最后一种日期格式(这是一个长值)…它显示“超出范围的年份”异常。。。但是python内置的datetime模块能够解析这个长值..为什么会这样..实际上这是我已经做过的,当@TimPietzcker建议的时候..你可以在评论中看到。。!!。。但是thanx的回答(以及代码描述)。。!!要安装dateutil:
pip安装python dateutil
。就像他们不提供如何通过
pip
安装它时,希望您认为它不是合法的软件包一样。