我試圖將時間持續時間(例如字符串爲「3h30m」)轉換爲單獨的小時和分鐘組件。我想允許小時大於23個獲取帶小時數> 24的時間
time.strptime("3h30m", "%Hh%Mm")
以上回報time.struct_time
其中tm_hour=3
和tm_min=30
。
如果我嘗試:
time.strptime("25h30m", "%Hh%Mm")
我得到一個ValueError
。是否可以運行以上並獲得tm_hour=25
?
我試圖將時間持續時間(例如字符串爲「3h30m」)轉換爲單獨的小時和分鐘組件。我想允許小時大於23個獲取帶小時數> 24的時間
time.strptime("3h30m", "%Hh%Mm")
以上回報time.struct_time
其中tm_hour=3
和tm_min=30
。
如果我嘗試:
time.strptime("25h30m", "%Hh%Mm")
我得到一個ValueError
。是否可以運行以上並獲得tm_hour=25
?
我沒有最終使用正則表達式:
def parse_time_span(time_string):
"""Convert an inputted string representing a timespan, like 3h30m15s, into a duration in seconds."""
pattern = re.compile(r"^(?:(?P<hours>\d+)h)?(?:(?P<minutes>\d+)m)?(?:(?P<seconds>\d+)s)?$")
(hours, minutes, seconds) = pattern.match(time_string).groups()
hours = 0 if hours is None else int(hours)
minutes = 0 if minutes is None else int(minutes)
seconds = 0 if seconds is None else int(seconds)
total_seconds = datetime.timedelta(hours=hours, minutes=minutes, seconds=seconds).total_seconds()
return round(total_seconds)
僅僅因爲你想要它並不意味着它可能在這個框架中。正如@Psidom所說,你需要做的工作來解析你所關心的。
您小時的正則表達式是:
[0-9]*h
和分鐘:
[0-9]*m
PY中使用正則表達式可以發現here。
如果您打算投票,請提供意見。 –
不,您不能使用time.strptime()
,%H
只能表示0到23之間的數字。時間元組格式不支持tm_hour
值> 23。
你可以使用正則表達式來代替:
import re
def parse_time(inputtext, _pattern=re.compile(r'(?:(\d+)h)?([0-5]\d)m')):
try:
hours, minutes = _pattern.search(inputtext).groups()
except AttributeError:
raise ValueError('Not a valid time string')
return int(hours or 0), int(minutes)
上面的圖案適用於任何小時和分鐘的組合,以分鐘到59小時,並無限制(並省略通通工作太)。
>>> parse_time('25h82m') # invalid
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 5, in parse_time
ValueError: Not a valid time string
>>> parse_time('25h30m') # valid
(25, 30)
>>> parse_time('3h30m') # valid
(3, 30)
>>> parse_time('30m') # valid
(0, 30)
是不是23小時的最大價值? – Psidom
@Psidom我不希望它成爲 – theonlygusti
不,作爲解釋:'%H':\t「小時(24小時制)作爲零填充十進制數00,01,...,23」 https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior – DeepSpace