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 

它的工作,但我觉得很尴尬。

+0

我会使用'datetime'包然后把一个算法,获取当前日期,其中如果周多是由4,因为4个星期在一个月内。阅读文档,我相信有一个抵消方法 – Smashed

+0

你也不能只是要求一个答案,没有尝试 – Smashed

+0

@Smashed,当然。我已经尝试过并做了一些事情(请参阅上面的更新),但这是一种令人费解的解决方案。 – LearnAWK

  • 使用正则表达式来获得相关的部分:

    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