2013-08-17 109 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

這有效!謝謝! –