我正在尝试获取一个代表April 23rd的datetime
实例,但始终获取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
无效而不是引发异常来解决问题。这是此解析器的另一个问题。