2012-03-01 87 views
37

我接受日期时间为各种格式的字符串系统(在Python开发),我必须解析 them..Currently时间字符串格式为:在Python中解析datetime ..?

Fri Sep 25 18:09:49 -0500 2009 

2008-06-29T00:42:18.000Z 

2011-07-16T21:46:39Z 

1294989360 

现在我想一个通用解析器,可以在适当的日期时间对象中转换任何这些日期时间格式...

否则,我必须去解析他们单独。所以请提供分别解析它们的方法(如果没有泛型解析器).. !!

回答

52

由于@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 
+0

实际上,这是我已经做了什么,@TimPietzcker建议时......你可以在评论中看到.. !! ..但是对于真棒回复(和代码描述)而言,thanx .. !! – 2012-03-01 12:49:14

+0

要安装dateutil:'pip install python-dateutil'。这就像他们希望你认为这不是一个合法的包,当他们不提供如何通过'pip'安装它。 – ArtOfWarfare 2017-10-25 19:54:54

14

你应该看看dateutil包。

+6

特别是'dateutil.parser.parse()' – Kimvais 2012-03-01 12:18:34

+0

thanx为答案.. !! ..但一件事..“dateutil.parser.parse”解析前3个日期格式..但它不能解析最后的日期格式(这是一个很长的值)..它显示了“年度超出范围”异常...但python内置日期时间模块能够解析这个长期价值..为什么这样.. ?? – 2012-03-01 12:31:24