【问题标题】:Python Parse DatetimePython 解析日期时间
【发布时间】:2020-05-11 19:52:32
【问题描述】:

我尝试在这里研究这个问题,但似乎无法找到正确的谷歌组合来找到回答相同问题的其他人,但如果您知道重复的问题,只需 lmk。

我正在尝试将持续时间解析为日期时间。字符串将如下所示: “4d2h10m30s”持续 4 天 2 小时 10 分 30 秒。 但我也需要它来解析它是否 “4d2h”持续 4 天 2 小时 或者也 "2h30m" 2 小时 30 分钟。

感谢任何帮助。

【问题讨论】:

    标签: python datetime format duration


    【解决方案1】:

    GitHub上有一个库,名为pytimeparse,它似乎在做你想做的事。来自文档:

    中定义的单个函数pytimeparse.timeparse.timeparse 库(也可用作 pytimeparse.parse)解析时间表达式 像下面这样:

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

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

    顺便说一句,答案来自How can I parse free-text time intervals in Python, ranging from years to seconds?。我使用的 Google 术语是:python 日期间隔解析

    【讨论】:

      【解决方案2】:
      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}
      

      【讨论】:

        猜你喜欢
        • 2012-09-04
        • 1970-01-01
        • 1970-01-01
        • 2014-01-29
        • 1970-01-01
        • 2022-01-22
        • 2018-06-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多