2015-10-21 148 views
0

我試圖將時間戳格式爲20151021 | 133102 [-0400/1]轉換爲紀元時間。Python 2.7將標準unix時間戳轉換爲紀元時間

我希望代碼運行,而不管它運行的機器的本地時區,並且是DST知道的,所以代碼將通過開關運行到/從DST運行。我需要的代碼下的Python 2.7.x運行(最好只使用標準庫模塊,因此代碼爲便攜式)

浪費下午的谷歌搜索後,我已經能夠做的最好的是:

time.mktime(time.strptime('20151021|133102','%Y%m%d|%H%M%S'))` 

這不允許我合併偏移量或夏令時標誌。

我也試過如下:

time.mktime(time.strptime('20151021|133102-4000','%Y%m%d|%H%M%S%z')) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/lib/python2.7/_strptime.py", line 467, in _strptime_time 
    return _strptime(data_string, format)[0] 
    File "/usr/lib/python2.7/_strptime.py", line 317, in _strptime 
(bad_directive, format)) 
ValueError: 'z' is a bad directive in format '%Y%m%d|%H%M%S%z' 

但似乎strptime不允許抵銷。

strptime不支持:

time.mktime(time.strptime('20151021|133102EDT','%Y%m%d|%H%M%S%Z')) 

但是這意味着我需要以某種方式轉換的偏移時區的縮寫,這似乎有點愚蠢 - 並可能製造出不同的代碼運行在那裏上的錯誤。

我不能相信這不是更簡單,因爲這個問題應該是常規。任何援助將不勝感激。

回答

-1

首先您要將數字識別爲字符串。我所做的是將字符串標識爲整數,然後使用datatime將其轉換爲epoche時間。

您需要刪除不認定爲一個整數符號有上面列出的以下號碼,但下面的代碼爲我工作在Python 2.7版

import datetime conversion = datetime.datetime.fromtimestamp(int("20151021")).strftime('%Y-%m-%d %H:%M:%S') print (conversion)

+0

基於此工作,試用和錯誤以獲得正確的格式。 – Rob

+0

感謝您的回覆,但這不是問題...我的代碼工作,但它不包括DST /偏移量。 – user73383

-1

奇怪。工程在Python3,但不Python2

>>> time.mktime(time.strptime('20151021|133102-0400', '%Y%m%d|%H%M%S%z')) 
1445452262.0 
+0

感謝您的回覆我正在運行最新的2.7分支Python 2.7.9。不想遷移到3.x,因爲很多重要的庫仍然是2.7.x,與許多小型系統一樣。 – user73383

0

有兩個步驟:

我想要的代碼就

time.mktime()預計當地時間作爲輸入,無論它正在運行的機器的本地時區的運行。如果輸入時間字符串不代表本地時間,請不要使用它。如果時間字符串具有utc偏移量(mktime()可能會產生模糊時間或過去/未來日期的錯誤結果),則也不應使用它。