如何转换日期格式并向其添加hh:mm:ss

How to convert date format and add hh:mm:ss to it

我的问题是用户可以输入任何日期格式,12-feb-201512/10/2015,我需要将其转换为以下格式:

12-feb-2015 00:00:00

这进一步将在 MySQL 查询中提供,然后将用于获取给定日期范围内的数据
所以我有 2 个问题:

我在 SO 线程上看到了很多方法,但 none 似乎对我有所帮助。

通常 SO 不是代码编写服务,但是...:)

这只是您可以做的事情的开始。我不知道有什么方法可以让一个测试捕获多种格式。相反,我总是 "gone through" 可用的格式。由于我们谈论的是两个,这里有一些东西可以启动你的思考:

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 formats here(向下滚动到 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'

您可以在每次找到新格式时更新格式集。