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

Python 如何转换日期格式并向其添加hh:mm:ss,python,date,datetime,datetime-format,python-datetime,Python,Date,Datetime,Datetime Format,Python Datetime,我的问题是,用户可以输入任何日期格式,2015年2月12日或2015年10月12日,我需要将其转换为以下格式: 12-feb-2015 00:00:00 这将进一步输入MySQL查询,然后用于获取给定日期范围内的数据 所以我有两个问题: 是否有任何标准方法将任何输入格式转换为我所需的格式 如何将hh:mm:ss附加到它 我在SO线程上看到了很多方法,但似乎没有一个能帮我解决问题。通常,SO不是一个代码编写服务,而是…:) 这只是你能做的事情的开始。我不知道有什么方法可以让一个测试捕获多种格

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

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_日期(“2015年10月12日”)
产生
2015年10月12日解析为2015年10月12日00:00:00
parse_date(“2015年2月12日”)
产生
2015年2月12日解析为2015年2月12日00:00:00


那会让你走的。查看(向下滚动到strftime函数)。

通常情况下,它不是代码编写服务,而是…:)

这只是你能做的事情的开始。我不知道有什么方法可以让一个测试捕获多种格式。相反,我总是“浏览”可用的格式。既然我们谈论的是两个问题,那么这里有一些东西可以激发你的思考:

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_日期(“2015年10月12日”)
产生
2015年10月12日解析为2015年10月12日00:00:00
parse_date(“2015年2月12日”)
产生
2015年2月12日解析为2015年2月12日00:00:00


那会让你走的。查看(向下滚动到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'

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

您的方法的主要问题是,任何类型的格式都可能是无限的,您可以想象多少

受@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'
您可以在每次发现新格式时更新该组格式。

是日期格式还是仅列出的两种格式?@AlG:目前可以是任意格式,但我将限制为这两种格式。问题是我需要将用户友好的月份-二月/三月/四月作为必填项,另一个是可选的(但无法删除)它是任何日期格式还是仅列出的两种格式?@AlG:目前它可以是任何格式,但我将限制为这两种格式。问题是,我需要将用户友好的月份-2月/3月/4月作为强制性的,另一个是可选的(但不能删除),通常不是代码编写服务,而是…:)-我很清楚,伙计,我在寻找一个正确方向的方法或指示,而不是代码编写服务…不管怎样,小小的调整和您的解决方案是有帮助的!:)通常情况下,不是代码编写服务,而是…:)-我很清楚,伙计,我在寻找一个正确方向的方法或指示,而不是代码编写服务…不管怎样,小小的调整和您的解决方案是有帮助的!:)