我的问题是用户可以输入任何日期格式,12-feb-2015
或12/10/2015
,我需要将其转换为以下格式:
12-feb-2015 00:00:00
将进一步在MySQL查询中提供,该查询将用于获取给定日期范围内的数据
所以我有两个问题:
是否有任何标准的方法来转换任何输入格式到我需要的一个?
我怎么能附加
hh:mm:ss
到它?
我在SO线程上看到了很多方法,但似乎没有一个能帮助我。
通常SO不是一个代码编写服务,但是…:)
这只是你能做的事情的开始。我不知道有什么方法可以让一个测试捕获多种格式。相反,我总是"浏览"可用的格式。既然我们谈论的是两个,这里有一些东西可以启动你的思考:
from datetime import datetime
def parse_date(thedate):
result = None
#try each format
try:
result = datetime.strptime(thedate, "%d-%b-%Y")
except ValueError:
pass
except:
raise
# Let the last one "blow" up
if result is None:
result = datetime.strptime(thedate, "%d/%m/%Y")
print "{} parsed into {}".format(thedate,result.strftime("%d-%b-%Y %H:%M:%S"))
parse_date("12/10/2015")
产12/10/2015 parsed into 12-Oct-2015 00:00:00
和parse_date("12-feb-2015")
生成12-feb-2015 parsed into 12-Feb-2015 00:00:00
那应该能让你走起来。查看这里的strptime/strftime格式(向下滚动到strftime函数)
您的方法的主要问题是任何类型的格式可能是无限种,无论您能想象多少。
受@al-g回答的启发,我提出了一种使用一组已知数据格式的方法。
from datetime import datetime
def convert(dtm):
formats = ['%d/%m/%Y', '%d-%m-%Y', '%d/%m/%Y %H:%M:%S', '%d-%m-%Y %H:%M:%S']
for fmt in formats:
try:
return datetime.strptime(dtm, fmt).strftime('%d/%b/%Y %H:%M:%S')
except ValueError:
pass
except:
raise
print 'Format not recognized'
>>> convert('15072015')
Format not recognized
>>> convert('15-07-2015')
'15/Jul/2015 00:00:00'
>>> convert('15/07/2015')
'15/Jul/2015 00:00:00'
你可以在每次找到新的格式时更新格式集