【问题标题】:How to handle spelled out days in strptime如何处理strptime中的拼写天数
【发布时间】:2021-06-12 04:26:01
【问题描述】:

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

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

我想使用 strptime 将其转换为日期时间对象,但我不知道如何处理日期的拼写部分,例如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'

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

【问题讨论】:

  • 这有用吗? link
  • 是的,非常感谢!当然,现在我想知道为什么有两个独立的内置日期时间解析器。

标签: python datetime strptime


【解决方案1】:

例如22nd8th 并没有在 the format documentation 中说

你说得对,文档中没有提到它,因为没有这样的格式,你可以解析它们的一种方法是使用 regex,并将这些日期字符串转换为 Python 的 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)]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-21
    • 1970-01-01
    • 1970-01-01
    • 2011-05-02
    • 2014-07-15
    • 2020-07-01
    • 2011-10-28
    • 2016-09-27
    相关资源
    最近更新 更多