2016-02-25 86 views
0

timedelta是否有任何包爲Python 2.7,這將允許我做這樣的事情:如何解析從字符串

>>> from datetime import timedelta  
>>> one_hour == the_lib_i_want.parse("1 hour") 
>>> one_hour == timedelta(hours=1) 
>>> True 

我想有強大的分析能力,並能夠分析比較通用的timedelta交涉如:「2分」,「3日」,「1年」等

回答

1

這個庫看起來像你一個方法: https://dateparser.readthedocs.org/en/latest/

這是不完全的解決方案,但它可以解析像你上面提到的東西,所以你可以當前日期時間並由圖書館生成以獲取timedelta。

所以,你可以這樣做:

import dateparser 
import datetime 
datetime.datetime.now() - dateparser.parse('1 hour ago') 

我知道這是不是你想要的,但也許它可以幫助

+1

1-'dateparser'是一個體面的圖書館。您可以將答案移動到[重複問題](http://stackoverflow.com/q/9775743/4279)2-'.now()'返回一個樸素的日期時間對象,表示可能不明確的本地時間。不要在時間運算中使用它 - 您可能會在DST轉換周圍獲得非無意義的結果。查看更多細節:[查找是否在日期時間之間經過了24小時 - Python](http://stackoverflow.com/q/26313520/4279) – jfs

1

下面是使用re我的實現。這是非常接近你需要的東西

import re 
from datetime import timedelta 


regex = re.compile(r'((?P<hours>\d+?)hr)?((?P<minutes>\d+?)m)?((?P<seconds>\d+?)s)?') 


def parse_time(time_str): 
    parts = regex.match(time_str) 
    if not parts: 
     return 
    parts = parts.groupdict() 
    time_params = {} 
    for (name, param) in parts.iteritems(): 
     if param: 
      time_params[name] = int(param) 
    return timedelta(**time_params) 

>>> parse_time('1hr')==timedelta(hours=1) 
True 
>>> parse_time('3hr10s')==timedelta(hours=3,seconds=10) 
True 
>>> parse_time('10s')==timedelta(seconds=120) 
False