Python日期格式转换Windows正常,Linux Debian下报错求助
解决Python 3.5中strptime解析带冒号时区的问题
这个问题我太熟悉了——Python 3.5的datetime.strptime对%z格式符的支持有局限,它只能解析不带冒号的时区偏移(比如-0700),而你的输入是带冒号的-07:00,这就直接导致了格式匹配失败。Python 3.7开始官方修复了这个兼容性问题,所以Windows上的3.7能正常运行,而Debian 9的3.5就卡壳了。
下面给你几个实用的解决方案,按推荐程度排序:
方案1:用python-dateutil库(最省心)
如果你的环境允许安装第三方库,python-dateutil的解析器对时区格式的兼容性拉满,甚至不用指定格式就能自动识别各种日期字符串:
# 先安装依赖 pip install python-dateutil
修改后的代码会简洁很多:
from dateutil import parser def parse_date(date_string: str, *args) -> str: req_date = parser.parse(date_string) return req_date.strftime("%Y-%m-%d")
不管是-07:00还是Z结尾的格式,它都能轻松处理,完全不用纠结格式字符串的问题。
方案2:手动处理时区字符串(零依赖)
如果不能装第三方库,就手动把输入里的时区冒号去掉,转换成Python 3.5能识别的格式:
import datetime as dt def parse_date(date_string: str, date_format: str) -> str: # 检测并处理带冒号的时区(比如把-07:00改成-0700) if "%z" in date_format and ":" in date_string[-6:]: date_string = date_string[:-3] + date_string[-2:] req_date = dt.datetime.strptime(date_string, date_format) return req_date.strftime("%Y-%m-%d")
这个改动很小,完全兼容你原来的调用方式,在Python 3.5里测试一下就能返回你要的'2019-04-11'。
方案3:升级Python版本(彻底解决)
如果你的Debian环境允许升级Python,直接升到3.7+就能彻底解决这个底层bug。不过Debian 9默认的Python版本偏旧,升级可能需要考虑系统依赖问题,这个方案要看你的实际运维情况来决定。
内容的提问来源于stack exchange,提问作者jarvis
相关产品推荐
相关产品推荐

