Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从字符串解析timedelta_Python_Time - Fatal编程技术网

Python 如何从字符串解析timedelta

Python 如何从字符串解析timedelta,python,time,Python,Time,是否有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年”等。此库看

是否有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

因此,您可以执行以下操作:

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

我知道这不是你想要的,但也许它会对你有所帮助

这个库看起来像是你的一种方式:

这并不完全是一个解决方案,但它可能会解析上面提到的内容,因此您可以使用库生成的当前日期时间来获取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
重新导入
从日期时间导入时间增量
regex=re.compile(r'((?P\d+?)hr)?(?P\d+?)m)?(?P\d+?)s)?)
def解析时间(时间):
parts=regex.match(时间)
如果不是零件:
返回
parts=parts.groupdict()
时间参数={}
对于parts.iteritems()中的(名称,参数):
如果参数:
时间参数[name]=int(参数)
返回时间增量(**时间参数)
>>>解析时间('1hr')==timedelta(小时=1)
真的
>>>解析时间('3hr10s')==timedelta(小时=3,秒=10)
真的
>>>解析时间('10s')==timedelta(秒=120)
假的

这是我使用
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
重新导入
从日期时间导入时间增量
regex=re.compile(r'((?P\d+?)hr)?(?P\d+?)m)?(?P\d+?)s)?)
def解析时间(时间):
parts=regex.match(时间)
如果不是零件:
返回
parts=parts.groupdict()
时间参数={}
对于parts.iteritems()中的(名称,参数):
如果参数:
时间参数[name]=int(参数)
返回时间增量(**时间参数)
>>>解析时间('1hr')==timedelta(小时=1)
真的
>>>解析时间('3hr10s')==timedelta(小时=3,秒=10)
真的
>>>解析时间('10s')==timedelta(秒=120)
假的

1-
dateparser
是一个不错的库。您可以将答案移动到2-
.now()
返回一个简单的datetime对象,该对象表示可能不明确的本地时间。不要在时间算术中使用它——您可能会在DST转换周围得到无意义的结果。请参阅更多详细信息:1-
dateparser
是一个不错的库。您可以将答案移动到2-
.now()
返回一个简单的datetime对象,该对象表示可能不明确的本地时间。不要在时间算术中使用它——您可能会在DST转换周围得到无意义的结果。请参阅更多详细信息: