如何处理 strptime 中的拼写天数
How to handle spelled out days in strptime
我有一个日期数组,格式如下:
['October 22nd, 2019', 'February 8th, 2020', 'July 31st, 2020', 'September 21st, 2020', ...]
我想使用 strptime 将它变成 datetime 对象,但我无法弄清楚如何将日期的拼写部分交出来,例如22nd
或 8th
并且 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)]
我有一个日期数组,格式如下:
['October 22nd, 2019', 'February 8th, 2020', 'July 31st, 2020', 'September 21st, 2020', ...]
我想使用 strptime 将它变成 datetime 对象,但我无法弄清楚如何将日期的拼写部分交出来,例如22nd
或 8th
并且 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
or8th
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)]