如何将表示时间范围的字符串转换为struct_time对象?

安德鲁·哈迪曼

您可以使用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”)
ec

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)]

还检查了流行的第三方:dateutildeloreanarrow-不认为他们提供的日期时间范围的分析功能。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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章