0

我有以下字符串,我正在尝试将其转换为 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”不匹配

4

2 回答 2

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{time}
  • 3 = 解析为 C{datetime}

几句话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上播放,看看哪一个与您的格式匹配。

你应该看看这个其他问题答案建议使用parsedatetimepyparsing来解析模糊时间戳,例如您的示例中的时间戳。还要检查这个 pyparsing wiki 页面

于 2013-09-02T01:36:17.060 回答
0

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

from datetime import datetime, date
dt = date.today()
print(datetime.combine(dt, datetime.min.time()))
于 2021-06-22T07:41:42.473 回答