您可以使用strptime
方法在Python中解析表示时间的字符串。 stackoverflow上有很多工作示例:
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 PM,而不是开始 - 结束时间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”)
答案 0 :(得分:2)
strptime()
只能解析单个日期时间字符串表示。
您必须按-
拆分输入字符串,并使用strptime()
加载每个项目:
>>> from datetime import datetime
>>>
>>> s = "03:00 PM - 05:00 PM"
>>> [datetime.strptime(item, "%I:%M %p") for item in s.split(" - ")]
[datetime.datetime(1900, 1, 1, 15, 0), datetime.datetime(1900, 1, 1, 17, 0)]
还检查了受欢迎的第三方:dateutil
,delorean
和arrow
- 不要认为它们提供了日期时间范围解析功能。 dateutil的fuzzy_with_tokens()
看起来很有希望,但它会抛出错误:
>>> from dateutil.parser import parse
>>> s = "03:00 PM - 05:00 PM"
>>> parse(s, fuzzy_with_tokens=True)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/user/.virtualenvs/so/lib/python2.7/site-packages/dateutil/parser.py", line 1008, in parse
return DEFAULTPARSER.parse(timestr, **kwargs)
File "/Users/user/.virtualenvs/so/lib/python2.7/site-packages/dateutil/parser.py", line 390, in parse
res, skipped_tokens = self._parse(timestr, **kwargs)
TypeError: 'NoneType' object is not iterable
这可能意味着它不应该解析多个日期时间。