我有以下字符串,我试图将其转换为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'
答案 0 :(得分:2)
以下是您的示例:
>>> 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
方法的文档字符串中所述:
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 question。 answers建议使用parsedatetime和pyparsing来解析模糊时间戳,例如示例中的时间戳。另请查看this pyparsing wiki page。
答案 1 :(得分:0)
您也可以将日期与日期时间的开始时间结合起来:
from datetime import datetime, date
dt = date.today()
print(datetime.combine(dt, datetime.min.time()))