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

Python中解析带时区时间格式并提取值的问题求助

搞定带时区偏移的时间字符串解析问题

我来帮你捋清楚这个问题哈,你用strptime()的时候踩了两个小坑,先给你说清楚为啥报错,再给你几个靠谱的解决办法:

为啥你的代码会报错?

你写的格式字符串%Y %m %d %H:%M:%S.%f %Z有两处不匹配:

  1. 你的原时间字符串里日期是2018-03-11(用连字符分隔),但格式里写的是%Y %m %d(空格分隔),这首先就对不上;
  2. 最关键的是%Z这个格式符——它是用来匹配时区名称的(比如UTC、CET这种),而你的时间里是+01:00这种UTC偏移量,%Z根本认不出这种格式,这就是报错的核心原因。

正确的解析方法

方法1:用Python标准库自带的%z格式符(Python3.2+可用)

其实标准库的datetime.strptime早就支持解析UTC偏移量了,用%z就行,只要把格式字符串调整得和原字符串完全对应:

from datetime import datetime

time_str = "2018-03-11 13:15:31.734874+01:00"
# 注意格式里的分隔符要和原字符串完全一致,偏移量用%z,而且不要加空格
format_str = "%Y-%m-%d %H:%M:%S.%f%z"
dt = datetime.strptime(time_str, format_str)
print(dt)
# 输出:2018-03-11 13:15:31.734874+01:00

解析出来的datetime对象会自带时区信息,后续想转UTC或者其他时区都很方便。

方法2:用dateutil自动解析(省心首选)

如果你不想纠结格式字符串,或者需要兼容各种奇奇怪怪的时间格式,python-dateutil库的解析器能自动识别这种带偏移的时间,简直是懒人福音:

先装库:

pip install python-dateutil

然后直接用:

from dateutil import parser

time_str = "2018-03-11 13:15:31.734874+01:00"
dt = parser.parse(time_str)
print(dt)
# 输出:2018-03-11 13:15:31.734874+01:00

不管是带连字符、空格还是不同的时区格式,它基本都能搞定,不用你手动写格式。

方法3:用pandas处理批量数据(适合数据分析场景)

如果你是在处理批量的时间数据,pandas的to_datetime函数也能轻松应对这种格式:

import pandas as pd

time_str = "2018-03-11 13:15:31.734874+01:00"
dt = pd.to_datetime(time_str)
print(dt)
# 输出:2018-03-11 13:15:31.734874+01:00

而且它支持直接传入列表批量解析,效率比循环用strptime高多了。

小提示

  • 要是你想把解析后的时间转成UTC,直接用dt.astimezone(datetime.timezone.utc)就行;
  • 注意在Windows系统的Python3.6之前,%z可能有兼容性问题,遇到这种情况优先用dateutil的方法就好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:58:37