将字符串解析为日期会给出错误的日期
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)
我正在尝试将字符串解析为以下格式的日期:%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)