You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何将带时区的Datetime转换为Epoch时间戳?

嘿,我之前也遇到过一模一样的问题!你的时间字符串带时区偏移(+01:00),这正是直接用普通datetime方法报错的原因——普通的datetime对象是「无时区感知」的,而这种带时区的ISO格式需要特殊处理。下面给你几个靠谱的解决办法:

解决思路与方案

方法一:Python 3.7+ 用自带的fromisoformat(最简单)

这个方法是Python 3.7新增的,专门用来解析ISO 8601格式的时间字符串,包括带时区偏移的版本,完全不用自己写格式串:

from datetime import datetime

# 你的时间字符串
dt_str = "2018-02-14T22:15:00.232029+01:00"
# 解析为带时区感知的datetime对象
dt = datetime.fromisoformat(dt_str)
# 转换为Epoch时间戳(秒数,含小数)
epoch_ts = dt.timestamp()

print(epoch_ts)  # 输出:1518645300.232029

为什么这个能行? 因为fromisoformat会正确识别时区偏移,生成的dt对象是带时区信息的(dt.tzinfo不为None),调用timestamp()时会自动转换为UTC时间再计算Epoch值,结果完全准确。

方法二:低版本Python用python-dateutil库

如果你的Python版本低于3.7,安装python-dateutil库就能轻松解决:

首先安装依赖:

pip install python-dateutil

然后写代码:

from datetime import datetime
from dateutil.parser import isoparse

dt_str = "2018-02-14T22:15:00.232029+01:00"
# isoparse专门解析ISO格式,比通用的parse更高效
dt = isoparse(dt_str)
epoch_ts = dt.timestamp()

print(epoch_ts)

这个库会智能处理时区偏移,同样生成带时区的datetime对象,转timestamp就不会出错。

为什么你之前的方法会报错?

你用普通datetime.strptime时,大概率是因为格式串没处理好时区部分:strptime的%z指令默认匹配的是不带冒号的时区格式(比如+0100),而你的字符串是+01:00,直接用%Y-%m-%dT%H:%M:%S.%f%z会报错。如果非要用strptime,可以先去掉时区的冒号:

dt_str = "2018-02-14T22:15:00.232029+01:00"
# 去掉时区部分的冒号,变成+0100
dt_str_fixed = dt_str[:-3] + dt_str[-2:]
dt = datetime.strptime(dt_str_fixed, "%Y-%m-%dT%H:%M:%S.%f%z")
epoch_ts = dt.timestamp()

不过这个方法比较繁琐,优先推荐前两种更简洁的方案。

关键提醒:一定要确保你的datetime对象是带时区感知的(dt.tzinfo不为None),否则调用timestamp()时会默认使用本地系统时区,导致结果偏差。


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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:13:09