2017-01-06 141 views
0

我试图解析字符串以这种格式的日期错误的日期:这段代码%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:月份然后一天。 我在这里错过了什么吗?

+1

@hiroprotagonist:HTTP://dateutil.readthedocs .io/en/stable/parser.html –

+0

@MartijnPieters:好的,谢谢。仍然觉得那些不在标准库中的东西应该在问题中输入... –

+0

@hiroprotagonist:我同意,并且重命名的函数也没有帮助。 dateutil项目对于这种解析非常流行,这是我知道的唯一原因。 –

回答

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) 
+1

当然,'dateutil.parser'是一个* flexible *解析器,可以同时处理不同的输入格式,这就是为什么它经常用来代替'datetime.strptime()'(它只能处理一个特定的输入格式)。 –

+0

@MartijnPieters,我明白了。我想当我们只有一种格式时,不需要安装一个新的包('python-dateutil');) – ettanany

+0

拯救了我的生命!谢谢 – JavaQueen

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) 
+0

但我想先在我的情况下得到月份 – JavaQueen

+2

@Cloudgls:不,那么'01'就意味着一月。在*输入*中,“01”首先出现。你在你的问题中声明这个日期代表* October *,所以你希望* second *号码是月份,第一个号码是一天。你对输出结果感到困惑吗? –