Python datetime转换指定日期为Unix时间戳的代码问题求助
问题定位
你这段代码有2个直接导致运行报错的错误,1个会导致结果不准的遗漏:
- 格式串分隔符不匹配:传入的日期字符串
Jul 07 2022 02:00:00各日期段用空格分隔,你写的解析格式'%b-%d-%Y-%H:%M:%S'用的是-做分隔,strptime解析时会直接抛出格式不匹配错误。 - 缺失模块导入:代码中直接调用
datetime.strptime和构造datetime对象,没有提前从datetime模块导入对应类,运行会报名称错误。 - 时区处理缺失:用无时区信息的原生时间对象直接和1970年1月1日做差计算Unix时间戳,会默认取运行环境的本地时区偏移,不同环境跑出来的结果不一致,和UTC标准Unix时间戳存在偏差。
修正代码
如果要计算UTC标准的Unix时间戳,代码如下:
from datetime import datetime, timezone releasedate = 'Jul 07 2022 02:00:00' # 修正格式串分隔符为空格,匹配输入字符串格式 releasedate2 = datetime.strptime(releasedate, '%b %d %Y %H:%M:%S') # 统一给计算的两个时间对象指定UTC时区,得到标准Unix时间戳 unixdate = (releasedate2.replace(tzinfo=timezone.utc) - datetime(1970, 1, 1, tzinfo=timezone.utc)).total_seconds()
运行后得到的unixdate值为1657159200.0,和该UTC时间对应的标准Unix时间戳完全一致。
如果你要解析的日期本身是本地时区的时间,只需要把
replace(tzinfo=timezone.utc)替换为对应本地时区的tzinfo对象即可,不要混用无时区的时间对象直接做差,避免结果偏差。
内容的提问来源于stack exchange,提问作者Crapts
相关产品推荐
相关产品推荐

