我试图找到将“ 2019年3月1日星期五”或“ 2019年3月2日星期六”转换为python datetime对象的最佳方法。
我尝试过分割,而不是对正则表达式的想法,但我敢肯定,这样做的方式更多“优雅”
从字符串“ 2019年3月1日星期五”开始,我希望是01-03-2019或2019-03-01
TNX!
答案 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)
您将遇到1st
,2nd
的问题。
因此,请尝试以下操作(不添加任何外部/第三方库):
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")