Python如何从UTC datetime对象获取正确的时间戳
问题根因
datetime.datetime.utcnow()返回的是不带时区信息的原生datetime对象,Python调用这类对象的timestamp()方法时,会默认将其识别为本地时区的时间来计算与纪元时间的差值,因此你处在UTC+8时区时,得到的结果就会比正确UTC时间戳少8小时。
解决方案
你可以直接用已有的utc时间对象和UTC纪元时间做差计算,全程复用现有对象计算时间戳,不需要创建任何新的动态时间对象,不会产生微秒级误差:
import datetime utc_time = datetime.datetime.utcnow() # 计算与UTC纪元起始时间的差值,直接得到正确时间戳 correct_timestamp = (utc_time - datetime.datetime(1970, 1, 1)).total_seconds()
注:代码中的
datetime.datetime(1970, 1, 1)是固定的纪元起始时间常量,不是动态生成的当前时间对象,不会引入任何额外的时间误差。
如果你的Python版本 >=3.9,后续生成UTC时间时更推荐直接使用带时区信息的datetime对象,后续调用timestamp()会直接返回正确结果:
import datetime # 生成带UTC时区信息的datetime对象 utc_time_with_tz = datetime.datetime.now(datetime.timezone.utc) correct_timestamp = utc_time_with_tz.timestamp()
内容的提问来源于stack exchange,提问作者Jeffrey Chen
相关产品推荐
相关产品推荐

