如何将UTC ISO 8601格式字符串转为秒数?Python datetime库使用问题
解决方案:将ISO 8601时间字符串转换为秒数
核心说明
你之前误用了datetime.timezone.fromutc()——这个函数是用来把无时区信息的datetime对象转换为指定时区的时间,并非用于解析ISO格式字符串。正确流程是先把字符串解析为带时区的datetime对象,再转成Unix时间戳(秒数)。
方法1:Python 3.7+ 原生实现(推荐)
datetime.fromisoformat()是Python 3.7新增的方法,可直接解析带时区的ISO 8601字符串,无需额外依赖:
from datetime import datetime # 示例时间字符串 time_str = "2022-11-05T22:36:48.701614+01:00" # 解析为带时区的datetime对象 dt = datetime.fromisoformat(time_str) # 转换为Unix时间戳(从1970-01-01 UTC到该时间的总秒数,含微秒小数) timestamp = dt.timestamp() print(timestamp) # 输出类似 1667686608.701614 # 若需整数秒,直接取整 integer_seconds = int(timestamp) print(integer_seconds) # 输出 1667686608
方法2:兼容Python 3.6及以下版本
如果你的Python版本低于3.7,可使用python-dateutil库的isoparse()方法,兼容性更强:
- 先安装依赖:
pip install python-dateutil
- 代码实现:
from dateutil.parser import isoparse time_str = "2022-11-05T22:36:48.701614+01:00" dt = isoparse(time_str) timestamp = dt.timestamp() print(timestamp)
时间差计算示例
得到datetime对象后,直接相减再调用total_seconds()即可获取时间差(或用timestamp直接相减,结果一致):
time_str_a = "2022-11-05T22:36:48.701614+01:00" time_str_b = "2022-11-06T00:36:48.701614+01:00" dt_a = datetime.fromisoformat(time_str_a) dt_b = datetime.fromisoformat(time_str_b) # 计算时间差(秒) time_diff = (dt_b - dt_a).total_seconds() print(time_diff) # 输出 7200.0,即2小时
内容的提问来源于stack exchange,提问作者Kyle
相关产品推荐
相关产品推荐

