2015-07-22 74 views
0

如何在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

回答

3
  • 使用正則表達式來獲得相關的部分:

    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

    相關問題