首页 > 解决方案 > 当逗号后有/没有空格时,为什么 dateutil.parser('May 10, 2019') 返回不一致的年份值?

问题描述

>>> from dateutil import parser
>>> parser.parse('May 10,2019')
datetime.datetime(2020, 5, 10, 0, 0)
>>> parser.parse('May 10, 2019')
datetime.datetime(2019, 5, 10, 0, 0)

注意逗号后面的空格或没有空格。

当逗号后面没有空格时,它似乎正在解析两位数的年份,而当逗号后面有空格时,它似乎正在解析一个四位数的年份。

这是预期的吗?

我拥有的版本:

$ pip show python-dateutil 名称:python-dateutil 版本:2.8.0

$ python3 Python 3.6.9(默认,2020 年 4 月 18 日,01:56:04)

标签: python-3.6python-dateutil

解决方案


这可能不会有太大帮助,但至少应该提供一些额外的信息。

它不是在一种情况下解析两位数的年份,在另一种情况下解析四位数的年份,实际上在没有空格的情况下默认为当前年份,由于某种原因它无法解析年份。

>>> from dateutil import parser
>>> parser.parse("August 06, 1881")
datetime.datetime(1881, 8, 6, 0, 0)
>>> parser.parse("August 06,1881")
datetime.datetime(2020, 8, 6, 0, 0)

此后,此问题已在 Github https://github.com/dateutil/dateutil/issues/939上打开,并且似乎与逗号可以时间内用作分隔符的事实有关(例如 23,5 秒)。它显然也曾经工作过:https ://github.com/dateutil/dateutil/issues/1075 所以有修复的希望,但这将涉及深入研究代码。

同时,应用到字符串的创可贴修复.replace(",", ", ")可能会起作用,但它肯定不是最容易阅读的东西。

这也可能有用,但 Github 问题可能是最好的: https ://dateutil.readthedocs.io/en/stable/parser.html#dateutil.parser.parserinfo.JUMP


推荐阅读