python:如何将“x天前”或“x月前”转换为日期?
问题描述:
如何在Python中将以下语句转换为日期(不需要时间)?python:如何将“x天前”或“x月前”转换为日期?
10 days ago
about 2 months ago
这里是我迄今为止所取得的代码:
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
它的工作,但我觉得很尴尬。
答
-
使用正则表达式来获得相关的部分:
value, unit = re.search(r'(\d+) (\w+) ago', 'about 2 months ago').groups()
-
创建
dateutil.relativedelta
:from datetime import datetime print datetime.now() - delta
from dateutil.relativedelta import relativedelta
if not unit.endswith('s'): unit += 's'
delta = relativedelta(**{unit: int(value)})
从当前日期减去它
所以整体功能是:
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
+0
关于dateutil,它似乎是一个很好的工具。但是,我无法安装它。收到以下错误消息:“无法找到满足要求dateutil的版本(从版本:) 找不到匹配的分配dateutil” – LearnAWK
我会使用'datetime'包然后把一个算法,获取当前日期,其中如果周多是由4,因为4个星期在一个月内。阅读文档,我相信有一个抵消方法 – Smashed
你也不能只是要求一个答案,没有尝试 – Smashed
@Smashed,当然。我已经尝试过并做了一些事情(请参阅上面的更新),但这是一种令人费解的解决方案。 – LearnAWK