Python识别(转换)文本到日期

时间:2019-03-25 20:00:39

标签: python date formatting

我试图找到将“ 2019年3月1日星期五”或“ 2019年3月2日星期六”转换为python datetime对象的最佳方法。

我尝试过分割,而不是对正则表达式的想法,但我敢肯定,这样做的方式更多“优雅”

从字符串“ 2019年3月1日星期五”开始,我希望是01-03-2019或2019-03-01

TNX!

3 个答案:

答案 0 :(得分:6)

也许不是“最佳”方式,但是dateutil's parser

是一种非常简单的方式
from dateutil import parser
parser.parse("Friday 1st March 2019")

返回:

datetime.datetime(2019, 3, 1, 0, 0)

几乎可以将其包装为:

from dateutil import parser
from datetime import datetime as dt
dt.strftime(parser.parse("Friday 1st March 2019"), "%d-%m-%Y")

返回:

'01-03-2019'

答案 1 :(得分:1)

您将遇到1st2nd的问题。

因此,请尝试以下操作(不添加任何外部/第三方库):

import re
from datetime import datetime as dt
ds = "Friday 1st March 2019"
parts = ds.split(" ")
ds = "{} {} {} {}".format(
   parts[0],
   re.sub('[^0-9]','', parts[1]),
   parts[2],
   parts[3]
)
a = dt.strptime(ds, "%A %d %B %Y")

如果要使其成为函数,请执行以下操作:

def convdate(s):
    parts = s.split(" ")
    ds = "{} {} {} {}".format(
        parts[0],
        re.sub('[^0-9]','', parts[1]),
        parts[2],
        parts[3]
    )
    return dt.strptime(ds, "%A %d %B %Y")

答案 2 :(得分:1)

请参考已回答的问题: How to get the datetime from a string containing '2nd' for the date in Python?

我只能重复一遍,解决方案是使用dateutil解析器:

from dateutil.parser import parse

your_string = "Friday 1st March 2019"
date_obj = parse(your_string)

在幕后,我猜想“第一”和“第二”部分是以某种方式提取的(例如splitting + regex),并简化为它的日值。 根据这样的输入,可以将公共日期时间库与正确的日期格式字符串一起使用:

import datetime
simplified_txt = "Friday 1 March 2019"
datetime_obj = datetime.datetime.strptime(simplified_txt,"%A %d %B %Y")