Python字符串转datetime在Ubuntu正常,Win10报错问题求助
问题描述
以下Python代码在Ubuntu系统可正常运行,但在Win10系统执行报错:
import datetime def main(): s1 = "Sat Jan 20 08:13:13 CST 2024" dt = datetime.datetime.strptime(s1, '%a %b %d %H:%M:%S %Z %Y') print(dt) main()
Ubuntu执行结果
2024-01-20 08:13:13
Win10执行错误
raise ValueError("time data %r does not match format %r" % ValueError: time data 'Sat Jan 20 08:13:13 CST 2024' does not match format '%a %b %d %H:%M:%S %Z %Y'
使用Python版本为3.8.5。
原因与解决办法
原因
Python的datetime.strptime中%Z指令跨平台兼容性差:
- Linux系统(如Ubuntu)可识别
CST这类时区缩写; - Windows系统对时区缩写的识别规则不同,默认不支持
CST作为合法时区标识,导致匹配失败。
解决方法
方法1:忽略时区部分解析
如果不需要保留时区信息,可直接从格式串中去掉%Z,同时截取字符串对应部分:
import datetime def main(): s1 = "Sat Jan 20 08:13:13 CST 2024" # 截掉时区部分,只保留前24个字符 dt = datetime.datetime.strptime(s1[:24], '%a %b %d %H:%M:%S %Y') print(dt) main()
方法2:使用第三方库python-dateutil增强兼容性
先安装库:
pip install python-dateutil
再修改代码:
from dateutil import parser def main(): s1 = "Sat Jan 20 08:13:13 CST 2024" dt = parser.parse(s1) print(dt) main()
python-dateutil的解析器对时区缩写的跨平台支持更好,能自动识别CST并完成解析。
方法3:手动映射时区缩写(固定时区场景适用)
如果仅需处理特定时区缩写,可手动替换字符串中的时区标识为Windows能识别的格式:
import datetime def main(): s1 = "Sat Jan 20 08:13:13 CST 2024" # 将CST替换为Windows识别的中国时区格式 s1_win = s1.replace("CST", "China Standard Time") dt = datetime.datetime.strptime(s1_win, '%a %b %d %H:%M:%S %Z %Y') print(dt) main()
内容的提问来源于stack exchange,提问作者lucky1928
相关产品推荐
相关产品推荐

