Вы можете проанализировать строку, представляющую время, в Python, с помощью метода strptime
. Есть множество рабочих примеров на StackOverflow:Как преобразовать строку, представляющую временной диапазон, в объект struct_time?
Converting string into datetime
Однако, что если ваша строка представляет собой время диапазона, в отличие от определенного времени; как вы могли разобрать строку, используя метод strptime
?
Например, допустим, что пользователь вводит начало и время окончания.
studyTime = input("Please enter your study period (start time – finish time)")
Вы можете запросить или даже заставить пользователя ввести время в определенном формате.
studyTime = input("Please enter your study period (hh:mm - hh:mm): ")
Предположим, пользователь вводит 03:00 PM – 05:00 PM
. Как мы можем разобрать эту строку, используя strptime
?
formatTime = datetime.datetime.strptime(studyTime, "%I:%M %p")
выше formatTime
будет работать только на один раз, т.е. 03:00 П.М., не начала - время окончания, 03:00 - 05:00. И следующее будет означать избыточные данные формата, и будет поднят ValueError
.
formatTime = datetime.datetime.strptime(studyTime, “%I:%M %p - %I:%M %p”)
Конечно, есть альтернативы, такие как время начала и окончания как отдельные строки. Тем не менее, мой вопрос в частности, есть ли средство для синтаксического анализа одной строки, которая содержит более одного временного представления, используя что-то похожее на нижеследующее.
formatTime = datetime.datetime.strptime(studyTime, “%I:%M %p - %I:%M %p”)
Спасибо alecxe, я догадался, что это будет так. Однако, поскольку я новичок в Python и вообще программировании, мне было любопытно узнать о возможных альтернативных способах решения этой проблемы. Я полагаю, что всегда мог написать свою собственную функцию, которая обеспечивает функциональность разбора 'datetime' * range *! –
@ мугман да. Определенно сделайте это. Кроме того, вы можете проверить, что формат - это то, что вы ожидаете увидеть. Например, вы можете применить проверку регулярного выражения с помощью этого шаблона: 'pattern = re.compile (r" \ d {2}: \ d {2} - \ d {2}: \ d {2} ")' и затем разделите строку на тире и загрузите с помощью 'strptime' обработку исключений. Просто мысли. – alecxe