使用时间模块在Python中进行数字时区处理

时间:2015-10-15 18:35:13

标签: python time

我有以下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是正确的。我错过了什么?

1 个答案:

答案 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

请参阅Converting datetime.date to UTC timestamp in Python