我正在尝试自动记录我的工作时间,并且需要一种方法来获取开始时间和结束时间之间的持续时间。在研究过程中,我遇到了 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())
输出保持不变。有人知道为什么吗?我完全不知所措。任何帮助将不胜感激。
答案 0 :(得分:1)
简短答案:您将这两次相加了,而在一定时间内,您需要计算差异。
因为您将两者加在一起。确实,您的select (case when month(current date) <= 1
then to_date(year(current date) || '01-01', 'YYYY-MM-DD')
else to_date(year(current date) + 1 || '01-01', 'YYYY-MM-DD')
end) as jan_start_of_month,
(case when month(current date) <= 2
then to_date(year(current date) || '02-01', 'YYYY-MM-DD')
else to_date(year(current date) + 1 || '02-01', 'YYYY-MM-DD')
end) as feb_start_of_month,
. . .
看起来像: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 (+)
大约3600秒或一小时。
话虽如此,时间是非常模糊的,因为它是特定于时区的:取决于您所在的位置以及时间(由于某些国家/地区更改了时区),所以结果可能会完全不同。 / p>