Python 解析 Datetime

问题描述 投票:0回答:2

我试着在这里研究这个问题,但似乎找不到正确的google组合,找不到其他人回答同样的问题,但如果你知道一个重复的问题,只是lmk。

我想把一个持续时间解析成一个日期时间。该字符串的将看起来像这样:"4d2h10m30s "为4天2小时10分钟30秒.但我也需要它仍然解析,如果它的 "4d2h "为4天2小时或也 "2h30m "为2小时30分钟。

任何帮助都是感激的。

python datetime format duration
2个回答
0
投票

在GitHub上有一个libray,名字叫做 pytimeparse这似乎是在做你想要的事情。从文档中可以看到。

库中定义的单个函数 pytimeparse.timeparse.timeparse (也可以用 pytimeparse.parse) 可以解析如下的时间表达式。

  • 32m
  • 2h32m
  • 3d2h32m
  • 1w3d2h32m

他们支持更多的格式,但我认为这将满足你的要求。

另外,答案来自于 如何在Python中解析从年到秒的自由文本时间间隔?. 我使用的谷歌术语是 python日期间隔解析


0
投票
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}
© www.soinside.com 2019 - 2024. All rights reserved.