如何检查字符串是否在有效的小时范围内

时间:2019-05-21 07:05:13

标签: python python-3.x datetime

我想检查是否有任何字符串是有效的小时范围(%H%M-%H%M格式),例如:

12:00-13:00  # that is valid

我尝试过:

try:
    time.strptime('12:00-13:00','%H:%M-%H:%M')
    return True
except ValueError:
    return False

但是会引起正则表达式错误:

error: redefinition of group name 'H' as group 3; was group 1 at position 47

您能指出解决方法吗?

谢谢!

2 个答案:

答案 0 :(得分:4)

您可以在-上分割字符串,然后检查结果列表中的元素数是否为2。 如果是,则分别解析两个日期时间,然后根据是否可以成功解析两个日期时间来返回TrueFalse

import time

def func(s):

    #Split string on -
    times = s.split('-')

    #If number of elements are not two, return False
    if len(times) != 2:
        return False
    else:

        try:
            #Try to parse both datetimes independently, if you can, return True, otherwise return False
            time.strptime(times[0],'%H:%M')
            time.strptime(times[1], '%H:%M')
            return True
        except:
            return False


print(func('12:00-13:00'))
#True
print(func('12:00-25:00'))
#False
print(func('00:00-25:00'))
#False
print(func('12:00'))
#False
print(func('abcd-efgh'))
#False
print(func('12:00-efgh'))
#False

答案 1 :(得分:1)

下面的代码应该可以帮助您快速找到解决方案。 注意:给定的程序包可以更好地处理错误/异常和日期时间对象转换。

from datetimerange import DateTimeRange

try:
    time_range = DateTimeRange("12:00", "23:00")
    print(time_range)
except ValueError as error:
    print(error)