如何从Python中包含'2nd'的字符串中获取日期时间?

kra*_*r65 3 python string datetime

我有几个字符串,我想从中得到日期时间.它们的格式如下:

Thu 2nd May 2013 19:00
Run Code Online (Sandbox Code Playgroud)

我几乎知道如何将其转换为日期时间,除了我遇到"2 nd "的问题.我现在有以下内容

>>> datetime.strptime('Thu 02 May 2013 19:00', '%a %d %B %Y %H:%M')
datetime.datetime(2013, 5, 2, 19, 0)
Run Code Online (Sandbox Code Playgroud)

这个月的日期工作正常,零填充数字,但是当我尝试时2nd,它会产生一个ValueError:

>>> datetime.strptime('Thu 2nd May 2013 19:00', '%a %d %B %Y %H:%M')
Traceback (most recent call last):
  File "<input>", line 1, in <module>
    (data_string, format))
ValueError: time data 'Thu 2nd May 2013 19:00' does not match format '%a %d %B %Y %H:%M'
Run Code Online (Sandbox Code Playgroud)

datetime指令列表中,我找不到与日期的有序值(第1,第2,第3等)相关的任何内容.有谁知道我怎么能让这个工作?欢迎所有提示!

Ffi*_*ydd 8

考虑使用dateutil.parser.parse.

它是第三方库,具有强大的解析器,可以处理这些事情.

from dateutil.parser import parse

s = 'Thu 2nd May 2013 19:00'

d = parse(s)
print(d, type(d))
# 2013-05-02 19:00:00 <class 'datetime.datetime'>
Run Code Online (Sandbox Code Playgroud)

一个简短的警告(在你的情况下不会真的发生):如果dateutil在字符串中找不到你日期的一个方面(比如说你遗漏了一个月)那么它将默认为default参数.默认为当前日期,时间为00:00:00.显然,如果需要,您可以使用其他datetime对象覆盖它.

最简单的安装dateutil方法可能是使用pip命令pip install python-dateutil.


Jon*_*nts 5

您可以预先填充原始字符串以调整适合您的日期strptime,例如:

from datetime import datetime
import re

s = 'Thu 2nd May 2013 19:00'
amended = re.sub('\d+(st|nd|rd|th)', lambda m: m.group()[:-2].zfill(2), s)
# Thu 02 May 2013 19:00
dt = datetime.strptime(amended, '%a %d %B %Y %H:%M')
# 2013-05-02 19:00:00
Run Code Online (Sandbox Code Playgroud)