【问题标题】:Why does the duration between Datetime and Timedelta come up 1h short?为什么 Datetime 和 Timedelta 之间的持续时间短了 1 小时?
【发布时间】:2019-11-11 10:56:42
【问题描述】:

我正在尝试自动记录我的工作时间,并且需要一种方法来获取开始时间和结束时间之间的持续时间。在我的研究中,我遇到了 this 似乎为我的问题提供了解决方案的问题。

但是,当尝试获取“11:30”和“12:30”之间的持续时间时,datetime.time() 方法返回“00:00:00”,我不知道为什么。

这是我正在使用的代码。

from datetime import datetime, timedelta
from time import strptime

start = strptime("11:30", "%H:%M")
stop = strptime("12:30", "%H:%M")

start_dt = datetime(100, 1, 1, start.tm_hour, start.tm_min)

duration = start_dt + timedelta(hours=stop.tm_hour,
                                minutes=stop.tm_min,
                                seconds=0)

print(duration.time())

这是我的预期(期望)输出: 01:00:00

这是我得到的实际输出: 00:00:00

我想知道它是否与我用来获取小时和分钟值的 time.strptime() 方法有关,所以我也尝试了这个:

from datetime import datetime, timedelta

start_dt = datetime(100, 1, 1, 11, 30)

duration = start_dt + timedelta(hours=12,
                                minutes=30,
                                seconds=0)

print(duration.time())

输出保持不变。有谁知道为什么?我完全不知所措。任何帮助将不胜感激。

【问题讨论】:

  • 11:30 + 12:3000:00,因为你加起来有两个:30

标签: python python-3.x datetime time timedelta


【解决方案1】:

简答:您将两次相加,而在一段时间内,您需要计算差异

因为你把这两个加起来了。实际上,您的start_dt 看起来像:1-1-100 11:30,并且您在其中添加了12:30,这意味着:

start_dt   1-1-100  11:30
+                   12:30
-------------------------
           2-1-100  00:00

或午夜,下一个天。

如果要计算时间差,可以将两者相减,如:

start = datetime.strptime('11:30', '%H:%M')
stop = datetime.strptime('12:30', '%H:%M')
duration = stop - start  # minus (-), not plus (+)

这给了我们那么:

>>> duration
datetime.timedelta(0, 3600)
>>> str(duration)
'1:00:00'

所以 3600 秒,或一小时。

话虽如此,时间是相当含糊不清,因为它是特定于时区的:取决于您所在的位置和时间(因为某些国家/地区更改了时区),它可能会导致完全不同的结果。

【讨论】:

  • 谢谢,这正是我想要的。现在我想起来似乎很明显。
猜你喜欢
  • 2020-02-09
  • 2017-06-18
  • 1970-01-01
  • 2020-07-17
  • 1970-01-01
  • 2022-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多