当逗号后面有空格时,为什么dateutil.parser('May 10,2019')返回不一致的年份值?

时间:2020-05-19 23:11:03

标签: python-3.6 python-dateutil

>>> 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)

1 个答案:

答案 0 :(得分:0)

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

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

>>> 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