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

时间:2017-01-06 09:17:38

标签: python date datetime-parsing

我正在尝试使用此代码将字符串解析为此格式的日期:%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作为日期,这意味着我得到的是1月而不是10月。 另一方面,当我将chaine更改为:14/11/201615:30:00时,我会得到正确的日期:20161114053000:月份和日期。 我在这里错过了什么吗?

2 个答案:

答案 0 :(得分:2)

你的约会不明确;它可以被解释为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)

答案 1 :(得分:1)

您可以使用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)