我正在尝试自动记录我的工作时间,并且需要一种方法来获取开始时间和结束时间之间的持续时间。在我的研究过程中我发现 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())
输出保持不变。有谁知道为什么?我完全不知所措。任何帮助将不胜感激。
最佳答案
简短回答:您将两个时间相加,而在一段时间内,您需要计算差异。
因为你把两者加起来了。事实上,您的 start_dt
看起来像:1-1-100 11:30
,并且您添加了 12:30
,所以这意味着:
start_dt 1-1-100 11:30
<b>+</b> 12:30
-------------------------
<b>2</b>-1-100 00:00
或第二天午夜。
如果要计算时间差,可以将两者相减,例如:
start = <b>datetime.</b>strptime('11:30', '%H:%M')
stop = <b>datetime.</b>strptime('12:30', '%H:%M')
duration = stop <b>-</b> start # minus (-), <i>not</i> plus (+)
这给了我们:
>>> duration
datetime.timedelta(0, 3600)
>>> str(duration)
'1:00:00'
所以 3600 秒,或一小时。
话虽这么说,时间是相当模糊的,因为它是特定于时区的:取决于您所在的位置以及时间(因为某些国家/地区更改了时区),它可能会导致完全不同的结果。
关于python - 为什么 Datetime 和 Timedelta 之间的持续时间短了 1 小时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56824587/