我有以下字符串,我正在尝试将其转换为 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”不匹配
这是您的示例:
>>> 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
将无法理解“午夜”,但您可以使用以下内容将其替换为实际小时:
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上播放,看看哪一个与您的格式匹配。
你应该看看这个其他问题。答案建议使用parsedatetime和pyparsing来解析模糊时间戳,例如您的示例中的时间戳。还要检查这个 pyparsing wiki 页面。
您也可以将日期与日期时间的开始时间结合起来:
from datetime import datetime, date
dt = date.today()
print(datetime.combine(dt, datetime.min.time()))