【问题标题】:Adding up datetime.datetime that are in single list添加单个列表中的 datetime.datetime
【发布时间】:2018-06-07 16:22:20
【问题描述】:

我到处寻找,但似乎找不到我需要的东西。我有一个包含日期时间的列表,我需要将其组合起来以找到总和。此列表是从文件中解析出来的,其中可以包含任意数量的日期时间项。例如,它看起来像这样。

[datetime.datetime(1900, 1, 1, 1, 19, 42, 89000), datetime.datetime(1900, 1, 1, 2, 8, 4, 396000), datetime.datetime(1900, 1, 1, 0, 43, 54, 883000), datetime.datetime(1900, 1, 1, 0, 9, 13, 343000)]

我用来获取这个的代码是这样的

time = [i[8] for i in smaller_list]
    try:
        times = [datetime.datetime.strptime(x, "%H:%M:%S.%f") for x in time]
    except ValueError:
        times = [datetime.datetime.strptime(x, "%M:%S.%f") for x in time]

Time 从我创建的用于分隔数据行的更大嵌套列表中获取变量。我已经尝试过 datetime.datetime.combine() 但我不确定如何将其用于单个列表中的项目。我是否需要创建一个嵌套的日期时间列表并将它们总结起来?如何遍历此列表并将所有时间合并为一个总和?如果我必须创建一个嵌套列表,我该如何遍历它来累加时间?试图绕开这个问题。

当您打印时间时,这是返回的内容,因此示例列表可以直接帮助我。

[datetime.datetime(1900, 1, 1, 1, 19, 42, 89000), datetime.datetime(1900, 1, 1, 2, 8, 4, 396000), datetime.datetime(1900, 1, 1, 0, 43, 54, 883000), datetime.datetime(1900, 1, 1, 0, 9, 13, 343000)]

这就是最初的样子。我需要将这些时间加起来作为总时间。通常以分钟为单位,包括微秒,很少是小时。

25:21.442

09:52.149

28:03.604

27:12.113

【问题讨论】:

  • 您的日期时间总和应该是什么样的?只需将年份和月份之类的东西加起来就可以得出公元 7300 年左右。这就是你想要的吗?
  • 您能解释一下您想要执行的总和背后的逻辑吗?
  • @Kevin 我更新了问题。通常只需几分钟到几微秒,有时甚至几小时
  • 那你为什么要使用日期时间而不是时间增量?
  • 那么我建议您阅读docs.python.org/3/library/datetime.html#timedelta-objects,它可能更适合您的任务。这不是编码问题,时间点(datetimedate)和持续时间(timedelta)之间的区别更普遍。

标签: python list datetime python-3.6 nested-lists


【解决方案1】:

如果其他人遇到这个问题,这里是我使用的代码。

time = [i[8] for i in smaller_list]
sumtime = datetime.timedelta()
for i in time:
    try:
        (h, m, s) = i.split(':')
        d = datetime.timedelta(hours=int(h), minutes=int(m), seconds=float(s))
    except ValueError:
        (m, s) = i.split(':')
        d = datetime.timedelta(minutes=int(m), seconds=float(s))
    sumtime += d
print(str(sumtime))

如果您正在学习 python,那么试图将您的思想围绕日期时间和时间增量来处理会非常令人困惑。对于持续时间,您需要使用 timedelta。您必须将值拆分并将正确的值传递给时间增量,然后您可以将它们相加以找到持续时间。希望这可以帮助那里的人。

如果您需要将微秒四舍五入到秒,您可以使用此代码代替 d。

 d = datetime.timedelta(minutes=int(m), seconds=round(float(s)))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-21
    • 1970-01-01
    • 2021-05-22
    • 1970-01-01
    • 2020-08-15
    相关资源
    最近更新 更多