Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么Datetime和Timedelta之间的持续时间缩短了1小时?_Python_Python 3.x_Datetime_Time_Timedelta - Fatal编程技术网

Python 为什么Datetime和Timedelta之间的持续时间缩短了1小时?

Python 为什么Datetime和Timedelta之间的持续时间缩短了1小时?,python,python-3.x,datetime,time,timedelta,Python,Python 3.x,Datetime,Time,Timedelta,我正在尝试自动记录我的工作时间,需要一种方法来获取开始和结束时间之间的持续时间。在我的研究中,我偶然发现 这个问题似乎能解决我的问题 但是,当尝试获取“11:30”和“12:30”之间的持续时间时,datetime.time()方法返回“00:00:00”,我不知道为什么 这是我正在使用的代码 from datetime import datetime, timedelta from time import strptime start = strptime("11:30", "%H:%M")

我正在尝试自动记录我的工作时间,需要一种方法来获取开始和结束时间之间的持续时间。在我的研究中,我偶然发现 这个问题似乎能解决我的问题

但是,当尝试获取“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.strtime()方法有关,所以我也尝试了以下方法:

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\u dt
看起来像:
1-1-100 11:30
,您在上面添加了
12:30
,这意味着:

start_dt   1-1-100  11:30
+                   12:30
-------------------------
           2-1-100  00:00
所以3600秒,或者说一小时


也就是说,时间是非常模糊的,因为它是特定于时区的:取决于你在哪里,什么时候(因为一些国家改变了时区),它可能会产生完全不同的结果。

11:30
+
12:30
00:00
,因为你加起来有两个
:30
。谢谢,这正是我想要的。现在我想起来似乎很明显。
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'