如何在Python中将以下语句转换为日期(不需要时间)?
10 days ago
about 2 months ago
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止所做的代码:
import re
from datetime import datetime, timedelta
def string_to_delta(s):
value = int(re.search(r'\d+', s).group())
if "day" in s:
value = value*1
elif "month" in s:
value = value *30
date_ago = (datetime.now() - timedelta(days=value)).date()
str_date= date_ago.strftime("%d %B %Y")
return str_date
Run Code Online (Sandbox Code Playgroud)
它有效,但我感觉很尴尬。
使用正则表达式获取相关部分:
value, unit = re.search(r'(\d+) (\w+) ago', 'about 2 months ago').groups()
Run Code Online (Sandbox Code Playgroud)创建dateutil.relativedelta:
from dateutil.relativedelta import relativedelta
if not unit.endswith('s'): unit += 's'
delta = relativedelta(**{unit: int(value)})
Run Code Online (Sandbox Code Playgroud)从当前日期中减去它:
from datetime import datetime
print datetime.now() - delta
Run Code Online (Sandbox Code Playgroud)所以一个完整的函数是:
from dateutil.relativedelta import relativedelta
from datetime import datetime
def ago_do_date(ago):
value, unit = re.search(r'(\d+) (\w+) ago', ago).groups()
if not unit.endswith('s'):
unit += 's'
delta = relativedelta(**{unit: int(value)})
print datetime.now() - delta
Run Code Online (Sandbox Code Playgroud)