2013-08-17 76 views
2

我有一个网络日志,看起来像这样的时刻字符串:转换奇时间戳和偏移UNIX时间在Python

10/Jun/2005:05:59:05 -0500

它想将其转换为一个UNIX时间戳。

一个datetime可以time.mktime(datetime.timetuple())

按照datetime docs转换,datetime.strptime()应该把它转换为datetime:

from datetime import datetime 
datetime.strptime("10/Jun/2005:05:59:05 -0500","%d/%b/%Y:%H:%M:%S %z") 

至少与我的Mac上的Python 2.7.2,这导致

ValueError: 'z' is a bad directive in format '%d/%b/%Y:%H:%M:%S %z'

在阅读关于该错误的许多问题后,我决定尝试python-dateutil

from dateutil import parser 
parser.parse("10/Jun/2005:05:59:05 -0500") 

这并不工作之一:

ValueError: unknown string format

现在怎么办?

+0

'%z'不被'strptime()'支持。请参阅[Python日期时间strptime()和strftime():如何保存时区信息](http://stackoverflow.com/a/14763274) –

回答

3

您可以使用dateutils使converstion,你将需要两个步骤:

>>> import calendar 
>>> from dateutil.parser import parse 
>>> d = parse('10/Jun/2005:05:59:05 -0500', fuzzy=True) 

这将创建一个DateTime对象

>>> d 
datetime.datetime(2005, 6, 10, 5, 59, 5, tzinfo=tzoffset(None, -18000)) 

并将其转换为UNIX时间戳:

>>> ts = calendar.timegm(d.utctimetuple()) 
>>> print ts 
1118401145 
+0

哦,那个神奇的'模糊'。 – alecxe

+0

这有效!谢谢! –