为什么dateutil.parser不能按预期工作



我正在尝试获取一个代表April 23rddatetime实例,但始终获取March 4th如果传递的参数是'3.4',则设置dayfirst=False毫无用处:

In [115]: from dateutil import parser
In [116]: parser.parse('4-23', ) #√
Out[116]: datetime.datetime(2014, 4, 23, 0, 0)
In [117]: parser.parse('4/23', ) #√
Out[117]: datetime.datetime(2014, 4, 23, 0, 0)
In [118]: parser.parse('4.23', ) #×
Out[118]: datetime.datetime(2014, 3, 4, 0, 0)
In [120]: parser.parse('4.23', dayfirst=False) #×
Out[120]: datetime.datetime(2014, 3, 4, 0, 0)

parser的错误吗?

简单的答案是,解析方法不支持点字符作为时间单位之间的分隔符,因为它是在以ISO格式表示的时间字符串的上下文中使用的。

请尝试将所有点转换为斜线(/(或高分(-(

parser.parse('4.23'.replace('.','/'))

解决这个问题

编辑(处理新评论(:

下面是的一个例子

解析器按预期工作如下:

>>> parser.parse('4/11/2019', dayfirst=True)
datetime.datetime(2019, 11, 4, 0, 0)
>>> parser.parse('4/11/2019', dayfirst=False)
datetime.datetime(2019, 4, 11, 0, 0)

解析器代表调用程序假定错误,并尝试通过使dayfirst参数无效来自动更正问题:

>>> parser.parse('3/13/2019', dayfirst=False)
datetime.datetime(2019, 3, 13, 0, 0)
>>> parser.parse('3/13/2019', dayfirst=True)
datetime.datetime(2019, 3, 13, 0, 0)

不可能有第13个月,因此解析器假设调用程序错误地请求了dayfirst参数——试图通过使dayfirst无效而不是引发异常来解决问题。这是此解析器的另一个问题。

相关内容

  • 没有找到相关文章

最新更新