gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 17:30:17 25 4
gpt4 key购买 nike

您可以在 Python 中使用 strptime 方法解析表示时间的字符串。 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”)

最佳答案

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

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

这可能意味着它也不应该解析多个日期时间。

关于python - 如何将表示时间范围的字符串转换为 struct_time 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34839385/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com