我有以下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
据我所知(这可能很容易出错......),我希望输出为GMT,以便转换为epoch是正确的。我错过了什么?
答案 0 :(得分:2)
请不要将time.mktime()
与UTC时间一起使用。它接受本地时间,因此如果您的本地时区不是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