在python中使用strftime解析使用的基本日期

时间:2015-07-13 16:38:54

标签: python date-parsing python-dateutil

这是关于在strftime中使用日期解析符号的简单问题。给出以下格式的日期:

mydt = "25-06 01:02:03" 

然后我尝试正确的解析字符串是:

DateFormat = '%d-%m %H:%M:%S'

但显然这是不正确的:

import dateutil.parser
DateFormat = '%d-%m %H:%M:%S'
mydt = "25-06 01:02:03"
dateutil.parser.parse(mydt).strftime(DateFormat)

ValueError: month must be in 1..12

请建议对解析模式进行适当的调整/修复。

1 个答案:

答案 0 :(得分:4)

dateutil.parser.parse()函数不带格式化程序。它无需配置即可解析各种日期时间格式。

改为使用datetime.datetime.strptime()类方法:

from datetime import datetime

result = datetime.strptime(mydt, DateFormat)

考虑到输入中没有一年,生成的datetime()对象将年份设置为1900。您可以随时解决当前年份:

this_year = datetime.now().year
result = result.replace(year=this_year)

如果您需要在闰年2月29日支持,请在输入中添加年份并解析:

DateFormat = '%Y %d-%m %H:%M:%S'
year_prefix = '{:%Y} '.format(datetime.now())
result = datetime.strptime(year_prefix + mydt, DateFormat)

演示:

>>> from datetime import datetime
>>> DateFormat = '%d-%m %H:%M:%S'
>>> datetime.strptime(mydt, DateFormat)
datetime.datetime(1900, 6, 25, 1, 2, 3)
>>> this_year = datetime.now().year
>>> datetime.strptime(mydt, DateFormat).replace(year=this_year)
datetime.datetime(2015, 6, 25, 1, 2, 3)
>>> DateFormat = '%Y %d-%m %H:%M:%S'
>>> year_prefix = '{:%Y} '.format(datetime.now())
>>> datetime.strptime(year_prefix + mydt, DateFormat)
datetime.datetime(2015, 6, 25, 1, 2, 3)