使用以下代码我想将输入日期和时间转换为纪元。问题是我获得了一个纪元输出,但是当我通过在线转换(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
答案 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