Python中datetime.strptime遇ValueError:IST时区匹配失败如何解决?
解决Python中strptime无法匹配IST时区缩写的问题
Python标准库的datetime.strptime方法里的%Z指令对时区缩写的支持范围很窄,仅能识别系统预设的少数通用时区(如UTC、GMT),像IST这类存在多义性的时区缩写(可指代印度标准时间、爱尔兰标准时间等),默认不会被识别,因此会抛出匹配错误。
以下是几种可行的解决办法:
方法一:手动替换时区缩写为UTC偏移量
已知IST(印度标准时间)对应的UTC偏移是+05:30,可直接替换字符串中的时区缩写,再用支持偏移量的%z指令解析:
from datetime import datetime start_time = "2021-07-31 09:43:23 IST" # 将IST替换为UTC+5:30的标准偏移格式 start_time_with_offset = start_time.replace("IST", "+05:30") t1 = datetime.strptime(start_time_with_offset, "%Y-%m-%d %H:%M:%S %z") print('Start time:', t1.time())
方法二:使用第三方库自动识别时区缩写
借助python-dateutil库的解析器,它能自动识别绝大多数常见时区缩写,适用性更强:
- 先安装库:
pip install python-dateutil
- 编写代码:
from datetime import datetime from dateutil import parser start_time = "2021-07-31 09:43:23 IST" t1 = parser.parse(start_time) print('Start time:', t1.time())
方法三:用pytz手动指定时区
如果明确知道IST对应的是印度标准时间,可使用pytz库指定具体时区,先解析无时区的时间字符串,再绑定时区:
- 安装库:
pip install pytz
- 编写代码:
from datetime import datetime import pytz start_time = "2021-07-31 09:43:23" # 先解析不带时区的原生时间对象 naive_time = datetime.strptime(start_time, "%Y-%m-%d %H:%M:%S") # 绑定印度标准时区 t1 = pytz.timezone('Asia/Kolkata').localize(naive_time) print('Start time:', t1.time())
内容的提问来源于stack exchange,提问作者Swati Shende
相关产品推荐
相关产品推荐

