UTC datetime字符串/元组转可操作datetime对象问题求助
解决Python解析带时区缩写的datetime字符串问题
嘿,这个坑我踩过!你用datetime.strptime失败的核心原因是:Python标准库的%z格式符只支持解析UTC偏移量(比如-0700这种格式),而PDT是时区缩写,strptime本身不认识这种缩写对应的偏移量。下面给你两个实用的解决办法:
方法1:用dateutil.parser自动解析(最省心)
python-dateutil库的解析器能自动识别绝大多数时区缩写,不用手动写格式字符串,非常方便。
首先安装库:
pip install python-dateutil
然后代码示例:
from dateutil import parser from datetime import timedelta tt = "Thu Apr 26 22:51:49 PDT 2018" # 直接解析,得到带时区信息的datetime对象 dt_with_tz = parser.parse(tt) # 现在就可以直接调用时间加减方法了 print(dt_with_tz + timedelta(days=2)) # 加2天 print(dt_with_tz - timedelta(hours=5)) # 减5小时
方法2:利用parsedate_tz的结果手动构造(无需额外库)
你已经用parsedate_tz拿到了包含时区偏移秒数的元组,我们可以用这个元组直接构造带时区的datetime对象:
from datetime import datetime, timezone, timedelta from email.utils import parsedate_tz tt = "Thu Apr 26 22:51:49 PDT 2018" tup = parsedate_tz(tt) # 元组前6个元素对应datetime的(year, month, day, hour, minute, second) dt_naive = datetime(tup[0], tup[1], tup[2], tup[3], tup[4], tup[5]) # 元组最后一个元素是时区偏移的秒数(这里-25200对应PDT的-7小时) tz = timezone(timedelta(seconds=tup[-1])) dt_with_tz = dt_naive.replace(tzinfo=tz) # 同样可以直接进行时间运算 print(dt_with_tz + timedelta(minutes=30))
补充说明
为什么原来的strptime会报错?因为%z格式符的定义是匹配UTC偏移量,格式必须是±HHMM或±HH:MM,而PDT这种时区缩写没有被标准库内置映射,所以无法识别。如果你的字符串能转换成Thu Apr 26 22:51:49 -0700 2018这种格式,原来的strptime写法就能生效。
内容的提问来源于stack exchange,提问作者Fenomatik
相关产品推荐
相关产品推荐

