将字符串解析为日期会给出错误的日期

Parse a string to a date gives a wrong date

我正在尝试将字符串解析为以下格式的日期:%Y%m%d%H%M%S 通过以下代码:

from dateutil.parser import parse as parseDate
from datetime import datetime, time, timedelta

chaine = "01/10/201604:45:00"
print chaine
date = chaine[:10] + " " + chaine[11:]
print date
date = parseDate(date,yearfirst=True)
print date
i = str(date).replace('-','')
print i
i = str(i).replace(':','')
print i
i = str(i).replace(' ','')
print i

这是我得到的输出:

01/10/201604:45:00
01/10/2016 4:45:00
2016-01-10 04:45:00
20160110 04:45:00
20160110 044500
20160110044500

在这里,我得到的不是 01 作为日和 10 作为月,而是 01 作为月和 10 作为日,这意味着我得到的是一月而不是十月。 另一方面,当我将 chaine 更改为: 14/11/201615:30:00 我得到正确的日期: 20161114053000 :月然后日。 我在这里错过了什么吗?

你的日期不明确;它可以解释为 10 月 1 日或 1 月 10 日。

因为您输入的第一个数字 (01) 是 ,而不是月份,您需要将 dayfirst 参数设置为 True;默认情况下,它设置为 False,这意味着遇到的第一个数字被解释为月份:

>>> parseDate('01/10/2016 4:45:00')
datetime.datetime(2016, 1, 10, 4, 45)
>>> parseDate('01/10/2016 4:45:00', dayfirst=True)
datetime.datetime(2016, 10, 1, 4, 45)

您可以使用 datetime.strptime() 来实现:

>>> from datetime import datetime
>>>
>>> datetime.strptime('01/10/201604:45:00', '%d/%m/%Y%H:%M:%S')
datetime.datetime(2016, 10, 1, 4, 45)