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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 23:19:56