我试着在这里研究这个问题,但似乎找不到正确的google组合,找不到其他人回答同样的问题,但如果你知道一个重复的问题,只是lmk。
我想把一个持续时间解析成一个日期时间。该字符串的将看起来像这样:"4d2h10m30s "为4天2小时10分钟30秒.但我也需要它仍然解析,如果它的 "4d2h "为4天2小时或也 "2h30m "为2小时30分钟。
任何帮助都是感激的。
在GitHub上有一个libray,名字叫做 pytimeparse这似乎是在做你想要的事情。从文档中可以看到。
库中定义的单个函数 pytimeparse.timeparse.timeparse (也可以用 pytimeparse.parse) 可以解析如下的时间表达式。
- 32m
- 2h32m
- 3d2h32m
- 1w3d2h32m
他们支持更多的格式,但我认为这将满足你的要求。
另外,答案来自于 如何在Python中解析从年到秒的自由文本时间间隔?. 我使用的谷歌术语是 python日期间隔解析
def getMyTime(timeString):
myTime = {'day': None, 'hour': None, 'minute': None, 'second': None}
positions = []
for item in timeString:
if item.isalpha():
positions.append([timeString.find(item), item])
for i in range(len(positions)):
value = None
if i == 0:
value = timeString[0:positions[i][0]]
else:
value = timeString[positions[i-1][0]+1:positions[i][0]]
value = 0 if len(value.lstrip('0')) == 0 else int(value.lstrip('0'))
if positions[i][1] == 'd':
myTime['day'] = value
elif positions[i][1] == 'h':
myTime['hour'] = value
elif positions[i][1] == 'm':
myTime['minute'] = value
elif positions[i][1] == 's':
myTime['second'] = value
else:
pass
return myTime
timeStrings = [
'10d',
'10d020h',
'10d20h30m',
'10d20h30m40s',
'010d0020h00030m00040s',
'00d00h00m00s',
'00s00m00h00d',
'0040s0030m0020h0010d',
'40s30m20h10d',
'30m20h10d',
'20h10d',
'10d',
]
for timeString in timeStrings:
print(getMyTime(timeString))
产量...
{'day': 10, 'hour': None, 'minute': None, 'second': None}
{'day': 10, 'hour': 20, 'minute': None, 'second': None}
{'day': 10, 'hour': 20, 'minute': 30, 'second': None}
{'day': 10, 'hour': 20, 'minute': 30, 'second': 40}
{'day': 10, 'hour': 20, 'minute': 30, 'second': 40}
{'day': 0, 'hour': 0, 'minute': 0, 'second': 0}
{'day': 0, 'hour': 0, 'minute': 0, 'second': 0}
{'day': 10, 'hour': 20, 'minute': 30, 'second': 40}
{'day': 10, 'hour': 20, 'minute': 30, 'second': 40}
{'day': 10, 'hour': 20, 'minute': 30, 'second': None}
{'day': 10, 'hour': 20, 'minute': None, 'second': None}
{'day': 10, 'hour': None, 'minute': None, 'second': None}