您可以使用strptime
方法在Python中解析表示时间的字符串。有许多关于stackoverflow的工作示例:
但是,如果您的字符串表示一个时间范围,而不是一个特定的时间,该怎么办?您如何使用该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
将引发a。
formatTime = datetime.datetime.strptime(studyTime, “%I:%M %p - %I:%M %p”)
当然,还有其他选择,例如将开始时间和结束时间作为单独的字符串。但是,我的问题特别是,是否有一种方法可以使用类似于以下内容的方法来解析一个包含多个时间表示形式的单个字符串。
formatTime = datetime.datetime.strptime(studyTime, “%I:%M %p - %I:%M %p”)
strptime()
只能解析单个datetime字符串表示形式。
您必须将输入字符串分割开,-
并使用以下命令加载每个项目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
-不认为他们提供的日期时间范围的分析功能。dateutilfuzzy_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
这可能意味着它也不应该解析多个日期时间。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句