Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将表示时间范围的字符串转换为struct_time对象?_Python_Parsing_Datetime_Strptime - Fatal编程技术网

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

Python 如何将表示时间范围的字符串转换为struct_time对象?,python,parsing,datetime,strptime,Python,Parsing,Datetime,Strptime,在Python中,可以使用strtime方法解析表示时间的字符串。stackoverflow有许多工作示例: 但是,如果字符串表示一个时间范围,而不是一个特定的时间,该怎么办;如何使用strtime方法解析字符串 例如,假设您有一个用户输入开始和结束时间 studyTime = input("Please enter your study period (start time – finish time)") 您可以提示甚至强制用户以特定格式输入时间 studyTime = input("P

在Python中,可以使用
strtime
方法解析表示时间的字符串。stackoverflow有许多工作示例:

但是,如果字符串表示一个时间范围,而不是一个特定的时间,该怎么办;如何使用
strtime
方法解析字符串

例如,假设您有一个用户输入开始和结束时间

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
。然后如何使用
strtime
解析此字符串

formatTime = datetime.datetime.strptime(studyTime, "%I:%M %p")
上述
formatTime
仅在一个时间有效,即下午3: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”)
strtime()
只能解析单个日期时间字符串表示形式

您必须按
-
拆分输入字符串,并使用
strtime()
加载每个项目:


还检查了流行的第三方:
dateutil
delorean
arrow
——认为它们不提供日期时间范围解析功能。dateutil看起来很有希望,但它会抛出错误:

>>> 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
>>来自dateutil.parser导入解析
>>>s=“03:00 PM-05:00 PM”
>>>解析(s,模糊_,带_标记=True)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/Users/user/.virtualenvs/so/lib/python2.7/site packages/dateutil/parser.py”,第1008行,在parse中
返回DEFAULTPARSER.parse(timestr,**kwargs)
parse中第390行的文件“/Users/user/.virtualenvs/so/lib/python2.7/site packages/dateutil/parser.py”
res,跳过的令牌=self.\u解析(timestr,**kwargs)
TypeError:“非类型”对象不可编辑

这可能意味着它不应该同时解析多个datetime。

谢谢alecxe,我猜情况就是这样。然而,由于我对Python和一般编程都是新手,我很想了解处理这个问题的任何可能的替代方法。我想我总是可以编写自己的函数,提供
datetime
范围解析功能@是的。当然可以。此外,您可以检查格式是否符合预期。例如,您可以使用以下模式应用正则表达式检查:
pattern=re.compile(r“\d{2}:\d{2}-\d{2}:\d{2}”)
然后用破折号拆分字符串,并用
strptime
处理异常。只是想法。
>>> 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