You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何将[YYYY]-[MM]-[DD]T[HH]:[MM]:[SS]+[XXXX]格式时间转为Unix时间戳?

解决带时区时间转Unix时间戳的简便方法

嘿,这个问题我之前踩过坑!别再跟time.mktime较劲了,它本来就不是用来处理带时区时间的,还要补星期、一年中的第几天这些参数,确实太繁琐。给你两个更省心的方案:

方案一:用Python 3.7+自带的datetime.fromisoformat

Python 3.7及以上版本的datetime模块支持直接解析ISO 8601格式的时间,不过需要把你的输入里的+0800改成+08:00(因为fromisoformat要求时区偏移是±HH:MM格式),代码示例:

from datetime import datetime

# 你的输入时间字符串
input_dt = "2024-05-20T16:45:30+0800"
# 调整时区偏移的格式:把末尾的两位分钟和前面的小时用冒号隔开
formatted_dt = input_dt[:-2] + ":" + input_dt[-2:]
# 解析成带时区的datetime对象
dt_obj = datetime.fromisoformat(formatted_dt)
# 直接转成Unix时间戳(秒级,浮点数,包含毫秒等小数部分)
unix_ts = dt_obj.timestamp()

print(unix_ts)

这个方法完全不用管什么星期、一年第几天的参数,datetime对象会自动处理时区,timestamp()方法直接返回从1970-01-01 UTC到该时间的秒数。

方案二:用dateutil.parser兼容低版本Python

如果你的Python版本低于3.7,或者不想手动调整时区格式,可以用python-dateutil库的解析器,它能自动识别几乎所有常见的时间格式,包括你的+HHMM时区偏移:

首先需要安装库:

pip install python-dateutil

然后代码:

from dateutil import parser

input_dt = "2024-05-20T16:45:30+0800"
# 直接解析,自动处理时区
dt_obj = parser.parse(input_dt)
# 转成Unix时间戳
unix_ts = dt_obj.timestamp()

print(unix_ts)

为什么time.mktime会报错?

time.mktime要求传入的是本地时间的struct_time元组,这个元组必须包含9个元素(年、月、日、时、分、秒、星期、一年第几天、夏令时标记),而且它完全不处理时区信息——你得先把带时区的时间转成本地时间,还要手动补全那些额外的参数,这才是你报错的原因。所以处理带时区的时间,真的不推荐用它。

内容的提问来源于stack exchange,提问作者Ivo

火山引擎 最新活动