如何转换日期格式并添加hh:mm:ss到它



我的问题是用户可以输入任何日期格式,12-feb-201512/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:00parse_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'

你可以在每次找到新的格式时更新格式集

相关内容

  • 没有找到相关文章

最新更新