【问题标题】:How to add a list of datetime?如何添加日期时间列表?
【发布时间】:2018-03-07 03:00:06
【问题描述】:
['00:00:36', '00:02:54', '00:06:06', '00:07:28', '00:07:57', '00:10:44', '00:11:34', '00:14:57', '00:15:03', '00:17:01', '00:17:13', '00:18:28', '00:18:50', '00:23:41', '00:25:47']

1) 我有一个 datetime.datetimeobject(基本上是时间戳),但我只是取出 HH:MM:SS 并在此处打印。如何添加这个(datetime.datetime 对象)?

[{'Start Time': '2017-01-01 00:00:36'}, {'Start Time': '2017-01-01 00:02:54'}, {'Start Time': '2017-01-01 00:06:06'}, {'Start Time': '2017-01-01 00:07:28'}, {'Start Time': '2017-01-01 00:07:57'}, {'Start Time': '2017-01-01 00:10:44'}, {'Start Time': '2017-01-01 00:11:34'}, {'Start Time': '2017-01-01 00:14:57'}, {'Start Time': '2017-01-01 00:15:03'}, {'Start Time': '2017-01-01 00:17:01'}, {'Start Time': '2017-01-01 00:17:13'}, {'Start Time': '2017-01-01 00:18:28'}, {'Start Time': '2017-01-01 00:18:50'}, {'Start Time': '2017-01-01 00:23:41'}, {'Start Time': '2017-01-01 00:25:47'}] 

2) 我应该将它全部转换为秒,然后将它们加起来并返回时间,还是有更好更简洁的方法来做到这一点?
3) '00:00:36' 这个值变成字符串了吧?

输出 (1) 应为 HH:MM:SS 格式。

输出 (2) DD:HH:MM:SS 格式。

【问题讨论】:

  • 您有datetime.datetime 对象列表还是字符串列表?您的问题标题暗示前者,但您的代码示例数据暗示后者。
  • @Robᵩ 列表显示在第一行,但似乎都没有日期信息。
  • datetime.datetime 对象(基本上是时间戳),但我刚刚取出 HH:MM:SS
  • @ChrisD'mello 但是您只想将它​​们加在一起,对吗?日期如何影响这个问题?此列表的正确最终结果是什么?
  • 最终结果可能以秒为单位或 DD:HH:MM:SS 或 HH:MM:SS

标签: python list datetime time sum


【解决方案1】:

这取决于您想对这些值做什么。为了获得最大的灵活性,您可以存储一个 datetime.time 对象数组,并使用 time.strftime() 对想要查看的输出类型使用格式

【讨论】:

    【解决方案2】:
    DD_HH_MM_SS = '{:0>2}:{:0>2}:{:0>2}:{:0>2}'
    HH_MM_SS = '{:0>2}:{:0>2}:{:0>2}'
    
    
    def from_seconds(seconds):
        days, seconds = divmod(seconds, 86400)
        hours, seconds = divmod(seconds, 3600)
        minutes, seconds = divmod(seconds, 60)
        return days, hours, minutes, seconds
    
    
    def to_seconds(hhmmss):
        hours, minutes, seconds = (int(a) for a in hhmmss.split(':'))
        return (hours * 3600) + (minutes * 60) + seconds
    
    
    if __name__ == '__main__':
        dates = [
            '00:00:36',
            '00:02:54',
            '00:06:06',
            '00:07:28',
            '00:07:57',
            '00:10:44',
            '00:11:34',
            '00:14:57',
            '00:15:03',
            '00:17:01',
            '00:17:13',
            '00:18:28',
            '00:18:50',
            '00:23:41',
            '00:25:47'
        ]
        total_seconds = sum(to_seconds(date) for date in dates)
        days, hours, minutes, seconds = from_seconds(total_seconds)
    
        print(HH_MM_SS.format((days * 24) + hours, minutes, seconds))
        print(DD_HH_MM_SS.format(days, hours, minutes, seconds))
    

    控制台:

    03:18:19
    00:03:18:19
    

    【讨论】:

      【解决方案3】:

      您可以将时间字符串转换为总秒数,然后将这些值相加得到总时间(以秒为单位)。然后将其分解为天、小时、分钟和秒:

      data       = ['00:00:36', '00:02:54', '00:06:06', '00:07:28', '00:07:57', '00:10:44', '00:11:34', '00:14:57', '00:15:03', '00:17:01', '00:17:13', '00:18:28', '00:18:50', '00:23:41', '00:25:47']
      components = [ [int(c) for c in time.split(":")] for time in data ]
      totalTime  = sum([ c[0]*3600+c[1]*60+c[2] for c in components ])
      output1    = "{:2d}:{:2d}:{:2d}".format(totalTime//3600, (totalTime%3600)//60, totaltime%60)
      output2    = "{:02d}:{:02d}:{:02d}:{:02d}".format(totalTime//86400,(totalTime//3600)%24, (totalTime%3600)//60, totalTime%60)
      
      # output1 will contain '03:18:19'
      # output2 will contain '00:03:18:19'
      

      【讨论】:

      • @Delirious 生菜。我打开页面输入我的答案一段时间,并在发布前没有刷新,所以我没有看到我的答案与你的基本相同。
      猜你喜欢
      • 1970-01-01
      • 2016-11-17
      • 2017-04-10
      • 2021-09-27
      • 2017-11-17
      • 2021-01-27
      • 1970-01-01
      • 2018-07-19
      • 2011-02-03
      相关资源
      最近更新 更多