如何处理 strptime 中的拼写天数

How to handle spelled out days in strptime

我有一个日期数组,格式如下:

['October 22nd, 2019', 'February 8th, 2020', 'July 31st, 2020', 'September 21st, 2020', ...]

我想使用 strptime 将它变成 datetime 对象,但我无法弄清楚如何将日期的拼写部分交出来,例如22nd8th 并且 the format documentation 中没有说明。

当一天中没有写出部分内容时,以下内容有效:

from datetime import datetime
dt_obj = datetime.striptime('October 22, 2019', '&B &d, &Y')

但我不知道如何解析写有日期的字符串:

in: dt_obj = datetime.striptime('October 22nd, 2019', '&B &d, &Y')
out: ValueError: time data 'October 22nd, 2019' does not match format '%B %d, %Y'

正确的格式是什么?谢谢!

e.g. 22nd or 8th and it doesn't say in the format documentation

你没看错,文档中没有提到它,因为没有这样的格式,解析它们的一种方法是使用 regex,并将这些日期字符串转换为 [=18] =] 的 datetime 的格式为.

import re
from datetime import datetime

[datetime.strptime(x, '%B %d %Y') for x in [' '.join(re.findall('^\w+|\d+',each)) for each in ['October 22nd, 2019', 'February 8th, 2020', 'July 31st, 2020', 'September 21st, 2020']]]

#output:
[datetime.datetime(2019, 10, 22, 0, 0), datetime.datetime(2020, 2, 8, 0, 0), datetime.datetime(2020, 7, 31, 0, 0), datetime.datetime(2020, 9, 21, 0, 0)]