Python dateutil.parser.parse解析的是第一个月,而不是第一天

Python dateutil.parser.parse解析的是第一个月,而不是第一天,python,parsing,datetime,format,python-dateutil,Python,Parsing,Datetime,Format,Python Dateutil,我正在使用dateutil.parser.parse从字符串格式化日期。但现在它把月和日搞混了 我有一个字符串,其中包含05.01.2015。之后 dateutil.parser.parse("05.01.2015") 它返回: datetime.datetime(2015, 5, 1, 0, 0) 我希望it会返回(2015,1,5,0,0) 我如何告诉代码格式是dd.mm.yyyy 对于记录,25.01.2015将按预期解析为(2015,1,25,0,0)。指定dayfirst=True

我正在使用
dateutil.parser.parse
从字符串格式化日期。但现在它把月和日搞混了

我有一个字符串,其中包含
05.01.2015
。之后

dateutil.parser.parse("05.01.2015")
它返回:

datetime.datetime(2015, 5, 1, 0, 0)
我希望it会返回
(2015,1,5,0,0)

我如何告诉代码格式是
dd.mm.yyyy


对于记录,
25.01.2015
将按预期解析为
(2015,1,25,0,0)

指定
dayfirst=True

>>> dateutil.parser.parse("05.01.2015", dayfirst=True)
datetime.datetime(2015, 1, 5, 0, 0)

在日期格式不明确的情况下(例如,当日期为12或更低),这将优先使用DD-MM-YYYY格式,而不是MM-DD-YYYY格式。函数是有文档记录的。

您曾问,“我如何告诉代码格式是dd.mm.yyyy?”

由于您已经导入了
dateutil
,因此大多数直接答案可能是指定日期字符串的格式,但这是非常难看的代码:

>>> dateutil.parser.datetime.datetime.strptime(date_string, '%d.%m.%Y')
datetime.datetime(2015, 1, 5, 0, 0)
我们可以在代码中看到一个明显的替代方案。你可以直接用

>>> from datetime import datetime
>>> datetime.strptime(date_string, '%d.%m.%Y')
datetime.datetime(2015, 1, 5, 0, 0)
还有一些新的替代库提供了大量的方法和属性

在这种情况下最简单的使用方法是
箭头

>>> import arrow
>>> arrow.get(date_string, 'DD.MM.YYYY')
<Arrow [2015-01-05T00:00:00+00:00]>
导入箭头 >>>获取(日期字符串'DD.MM.YYYY') 更容易记住的是,使用Python的旧格式系统,这可能会节省您学习arrow的时间

>>> import pendulum
>>> pendulum.datetime.strptime(date_string, '%d.%m.%Y')
<Pendulum [2015-01-05T00:00:00+00:00]>
导入钟摆 >>>钟摆.datetime.strtime(日期字符串,'%d.%m.%Y')
Tnx,这就成功了!我一直在查看您提到的文档,但没有找到任何内容。但现在它工作得很好!(我在2014年12月12日之后创建了此代码,因此自动运行正常。)没问题-很高兴它起到了作用。作为警告,请注意,即使使用
dayfirst=True
,如果您传递了一个“格式错误”的日期,如
01.13.2015
,解析
将忽略
dayfirst
,并解释
month=1
day=13
,这可能会导致意外的行为。我处理这一问题的方法是运行dayfirst和yearfirst的所有4个组合,并将结果粘贴到一个集合中,如果集合中包含多个内容,最后我会引发“值不明确”错误