Python:从指定日期生成目标时间戳失败的问题求助
解决时间戳生成偏差的问题
我看了你的代码,问题出在时区处理上!你用的time.mktime()函数是把本地时间转换成时间戳,但目标时间戳对应的是UTC时间的秒数乘以10^7。如果你的本地时区和UTC有偏移(比如国内东八区),结果自然会不对。
正确的解决方案
根据你的需求,我们需要把解析后的时间当作UTC时间来计算时间戳,这里分Python 2和Python 3两种情况给出代码:
Python 3 版本
import datetime times = '05.04.2018 13:15' # 解析字符串为datetime对象 dt = datetime.datetime.strptime(times, "%d.%m.%Y %H:%M") # 为对象添加UTC时区信息 dt_utc = dt.replace(tzinfo=datetime.timezone.utc) # 获取UTC秒级时间戳,再乘以10^7得到目标格式 target_timestamp = int(dt_utc.timestamp() * 10000000) print(target_timestamp)
Python 2 版本(Python 2没有timestamp()方法)
import datetime import calendar times = '05.04.2018 13:15' # 解析字符串为datetime对象 dt = datetime.datetime.strptime(times, "%d.%m.%Y %H:%M") # 用calendar.timegm()把UTC时间的timetuple转成秒级时间戳 timestamp_sec = calendar.timegm(dt.timetuple()) # 乘以10^7得到目标格式 target_timestamp = int(timestamp_sec * 10000000) print(target_timestamp)
关键差异说明
time.mktime():将本地时间的时间元组转换为时间戳,会受你当前系统时区影响。calendar.timegm():将UTC时间的时间元组转换为时间戳,完全基于UTC时区计算,这正是你需要的。
运行上面的代码,就能得到你想要的15229231800000000啦!
内容的提问来源于stack exchange,提问作者Presko
相关产品推荐
相关产品推荐

