dateutil parser解析时区异常:GMT+0200为何转为-02:00?
解决dateutil.parser解析GMT时区符号反转的问题
这是dateutil.parser在旧版本里的一个已知bug!我之前也碰到过类似的问题,给你详细解释下原因和解决办法:
问题原因
在python-dateutil 2.8.0之前的版本中,parser处理GMT+xxxxx这种格式的时区字符串时,存在符号反转的逻辑错误:
- 输入里的
GMT+0200本来表示比UTC早2小时(东二区,对应CEST时区),但旧版本的parser会错误地将其解析为比UTC晚2小时(西二区,即偏移量-02:00)。 - 这个问题是因为解析模块对GMT前缀的时区偏移符号处理逻辑出现了颠倒,属于官方已确认的历史bug。
解决方案
1. 升级python-dateutil到最新版本(推荐)
直接升级到2.8.0及以上版本,官方已经修复了这个时区解析的bug。升级命令如下:
pip install --upgrade python-dateutil
升级后再运行你的原代码:
from dateutil import parser input_date = "Tue May 01 2018 13:23:00 GMT+0200 (CEST)" print(parser.parse(input_date))
就能得到正确的输出:2018-05-01 13:23:00+02:00
2. 手动预处理输入字符串(无法升级时适用)
如果暂时无法升级依赖版本,可以手动修改输入字符串,移除GMT前缀,只保留正确的时区符号和偏移量:
from dateutil import parser input_date = "Tue May 01 2018 13:23:00 GMT+0200 (CEST)" # 替换GMT+为+,GMT-为-,修正时区符号解析 processed_date = input_date.replace("GMT+", "+").replace("GMT-", "-") parsed_date = parser.parse(processed_date) print(parsed_date) # 输出:2018-05-01 13:23:00+02:00
内容的提问来源于stack exchange,提问作者kemis
相关产品推荐
相关产品推荐

