Как решить, является ли строка в формате чч: мм в python? - PullRequest
0 голосов
/ 08 февраля 2012

Хотелось бы узнать, есть ли функция, которая возвращает True, если строка в часовом формате "чч: мм"?Я могу написать свою собственную функцию, но было бы хорошо, если бы была стандартная функция.

С наилучшими пожеланиями

Ответы [ 2 ]

5 голосов
/ 08 февраля 2012

Просто попробуйте интерпретировать его с помощью модуля time и поймать ValueError, возникающее при сбое преобразования:

>>> time.strptime('08:30', '%H:%M')
time.struct_time(tm_year=1900, tm_mon=1, tm_mday=1, tm_hour=8, tm_min=30, tm_sec=0, tm_wday=0, tm_yday=1, tm_isdst=-1)
>>> time.strptime('08:70', '%H:%M')
Traceback (most recent call last):
  (...)
ValueError: unconverted data remains: 0
>>> time.strptime('0830', '%H:%M')
Traceback (most recent call last):
  (...)
ValueError: time data '0830' does not match format '%H:%M'

Единственное, что не проверяется, это то, что вы на самом деле указываетеправильное количество цифр.Проверить, может ли len(time_string) == 5 быть достаточно простым, чтобы проверить это.

Редактировать: вдохновлено Кимвайсом в комментариях;чтобы обернуть это как функцию:

def is_hh_mm_time(time_string):
    try:
        time.strptime(time_string, '%H:%M')
    except ValueError:
        return False
    return len(time_string) == 5
2 голосов
/ 08 февраля 2012

Вы можете использовать time.strptime:

>>> help(time.strptime)
Help on built-in function strptime in module time:

strptime(...)
    strptime(string, format) -> struct_time

    Parse a string to a time tuple according to a format specification.
    See the library reference manual for formatting codes (same as strftime()).

Чтобы разобрать строку времени, которая работает:

>>> time.strptime('12:32', '%H:%M')
time.struct_time(tm_year=1900, tm_mon=1, tm_mday=1, tm_hour=12, tm_min=32, tm_sec=0, tm_wday=0, tm_yday=1, tm_isdst=-1)

Если вы передадите недопустимую временную строку, вы получите ошибку:

>>> time.strptime('32:32', '%H:%M')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python27\lib\_strptime.py", line 454, in _strptime_time
    return _strptime(data_string, format)[0]
  File "C:\Python27\lib\_strptime.py", line 325, in _strptime
    (data_string, format))
ValueError: time data '32:32' does not match format '%H:%M'

Итак ... ваша функция может выглядеть так:

def is_hh_mm(t):
    try:
        time.strptime(t, '%H:%M')
    except:
        return False
    else:
        return True
...