1

我正在尝试获取一个代表April 23rddatetime的实例,但如果传递的参数是3 月 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吗?

4

1 回答 1

-1

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

请尝试将所有点转换为斜杠(/)或 heifens(-)

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)

parser 代表调用者假设错误,并尝试通过使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而不是抛出异常来解决问题。这是此解析器的另一个问题。

于 2014-03-21T06:53:48.607 回答