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年」等
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年」等
這個庫看起來像你一個方法: https://dateparser.readthedocs.org/en/latest/
這是不完全的解決方案,但它可以解析像你上面提到的東西,所以你可以當前日期時間並由圖書館生成以獲取timedelta。
所以,你可以這樣做:
import dateparser
import datetime
datetime.datetime.now() - dateparser.parse('1 hour ago')
我知道這是不是你想要的,但也許它可以幫助
下面是使用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
1-'dateparser'是一個體面的圖書館。您可以將答案移動到[重複問題](http://stackoverflow.com/q/9775743/4279)2-'.now()'返回一個樸素的日期時間對象,表示可能不明確的本地時間。不要在時間運算中使用它 - 您可能會在DST轉換周圍獲得非無意義的結果。查看更多細節:[查找是否在日期時間之間經過了24小時 - Python](http://stackoverflow.com/q/26313520/4279) – jfs