将日期转换为“午夜”等时间

时间:2013-09-02 01:22:58

标签: python django datetime

我有以下字符串,我试图将其转换为python中的日期时间

从django模板我得到以下日期格式:

2013年7月1日午夜

我正在尝试将上面的字符串转换为日期时间格式

date_object = datetime.strptime(x, '%B %d, %Y, %I:%M %p')

抛出格式错误

时间数据'2013年7月1日,午夜'格式'%B%d,%Y,%I:%M%p'

2 个答案:

答案 0 :(得分:2)

你最好的镜头可能是parsedatetime模块。

以下是您的示例:

>>> import parsedatetime
>>> cal = parsedatetime.Calendar()
>>> cal.parse('July 1, 2013, midnight')
((2013, 7, 1, 0, 0, 0, 0, 245, 0), 3)

cal.parse()返回两个元组的元组。第一个是修改后的parsedatetime.Calendar对象,第二个是整数,如parse方法的文档字符串中所述:

  • 0 =完全没有解析
  • 1 =解析为C {date}
  • 2 =解析为C {时间}
  • 3 =解析为C {datetime}

strptime上的几句话:

strptime won't be able to understand“午夜”,但你可以用实际的小时替换它,使用类似的东西:

def fix_dt(raw_date):
    """Replace 'midnight', 'noon', etc."""
    return raw_date.replace('midnight', '0').replace('noon', '12')

def parse_dt(raw_date):
    """Parse the fuzzy timestamps."""
    return datetime.datetime.strptime(fix_dt(raw_date), '%B %d, %Y, %H')

然后:

>>> parse_dt('July 1, 2013, midnight')
datetime.datetime(2013, 7, 1, 0, 0)

您可以在strfti.me上播放,看看哪一个符合您的格式。

你应该看看this other questionanswers建议使用parsedatetimepyparsing来解析模糊时间戳,例如示例中的时间戳。另请查看this pyparsing wiki page

答案 1 :(得分:0)

您也可以将日期与日期时间的开始时间结合起来:

from datetime import datetime, date
dt = date.today()
print(datetime.combine(dt, datetime.min.time()))