2015-10-15 44 views
0

我有以下Python代碼:數字時區在Python處理與時間模塊

import json 
import fileinput 
import time 

ts_pattern = '[%d/%b/%Y:%H:%M:%S +0000]' 

for line in fileinput.input(): 
    json_data = json.loads(line) 
    etime = int(time.mktime(time.strptime(json_data['time_local'], ts_pattern))) 
    print etime 

我犯了一個錯誤,它出現。例如,在我正在閱讀的JSON中,time_local[06/Oct/2015:15:29:35 +0000]。結果我的腳本輸出1444166975。然而,這是不正確的,到目前爲止,我所看到的:

$ date -ud @1444166975 
Tue Oct 6 21:29:35 UTC 2015 

具有Linux的date命令執行轉換回給:

$ date +%s -ud "06-Oct-2015 15:29:35 +0000" 
1444145375 

據我瞭解(這很容易出錯...),我希望輸出格林威治時間,以便轉換爲紀元是正確的。我錯過了什麼?

回答

2

請勿在UTC時間使用time.mktime()。它接受本地時間,因此如果您的本地時區不是UTC,那麼您的代碼是錯誤的。

使用calendar.timegm()代替:

#!/usr/bin/env python 
import time 
from calendar import timegm 

tt = time.strptime('[06/Oct/2015:15:29:35 +0000]', 
        '[%d/%b/%Y:%H:%M:%S +0000]') 
print(timegm(tt)) # -> 1444145375 

Converting datetime.date to UTC timestamp in Python

+0

我一直喜歡的「我如何......?」,「你不」的帖子,因爲他們似乎透露有關新事物一種語言。這工作。非常感謝你。 – Andrew