Epoch转换未按预期工作

时间:2016-07-25 01:26:32

标签: python time epoch

使用以下代码我想将输入日期和时间转换为纪元。问题是我获得了一个纪元输出,但是当我通过在线转换(http://www.epochconverter.com/)进行测试时,时代并没有转化为我输入的日期和时间:

date_time2 = '09.03.1999' + " " + "13:44:17.000000"
pattern2 = '%d.%m.%Y %H:%M:%S.%f'
epoch2 = int(time.mktime(time.strptime(date_time2, pattern2)))
print epoch2

2 个答案:

答案 0 :(得分:1)

这里发生了什么:

  • time.strptime生成的time.struct_time与C tm结构密切相关;
  • time.mktime的文档非常明确,它会从struct_time产生本地时间,而不是GMT时间。

因此,您需要一个将struct_time转换为GMT时间的函数。在calendar模块中,这样的函数在python中隐藏了一点。

尝试改为:

date_time2 = '09.03.1999' + " " + "13:44:17.000000"
pattern2 = '%d.%m.%Y %H:%M:%S.%f'

# get a time structure
tm = time.strptime(date_time2, pattern2)

# convert to gmt
gmt_epoch = int(calendar.timegm(tm))

在这种情况下,我们最终得到:

>>> gmt_epoch
920987057

将其插入您已经提供的网站会产生 GMT:星期二,1999年3月9日13:44:17 GMT

答案 1 :(得分:1)

(我已经在这里赞成了@donkopotamus的答案:https://stackoverflow.com/a/38558696/42346

使用此答案:https://stackoverflow.com/a/19527596/42346我们可以看到您如何将当地时间转换为GMT。这需要pytz

import datetime as dt 
import pytz

naive_date = dt.datetime.strptime('09.03.1999' + " " + "13:44:17.000000", 
                                  '%d.%m.%Y %H:%M:%S.%f')
localtz = pytz.timezone('Hongkong')
date_aware = localtz.localize(naive_date,is_dst=None)
utc_date = date_aware.astimezone(pytz.utc)
int(time.mktime(utc_date.utctimetuple()))

结果:

920987057

enter image description here