在 python 中减去两次
- 2025-02-21 08:48:00
- admin 原创
- 21
问题描述:
我有两个datetime.time
价值观,exit
我enter
想做类似的事情:
duration = exit - enter
但是,我收到此错误:
TypeError:不支持的操作数类型 -:“datetime.time”和“datetime.time”
我该如何正确地做到这一点?一种可能的解决方案是将time
变量转换为datetime
变量,然后进行减法,但我相信你们一定有更好、更干净的方法。
解决方案 1:
尝试一下:
from datetime import datetime, date
datetime.combine(date.today(), exit) - datetime.combine(date.today(), enter)
combine
建立一个可以减去的日期时间。
解决方案 2:
使用:
from datetime import datetime, date
duration = datetime.combine(date.min, end) - datetime.combine(date.min, beginning)
使用起来date.min
更简洁,即使在午夜也能工作。
date.today()
如果第一次调用发生在 23:59:59,而下一次调用发生在 00:00:00,情况可能并非如此,可能会返回意外结果。
解决方案 3:
不要使用时间,请尝试 timedelta:
from datetime import timedelta
t1 = timedelta(hours=7, minutes=36)
t2 = timedelta(hours=11, minutes=32)
t3 = timedelta(hours=13, minutes=7)
t4 = timedelta(hours=21, minutes=0)
arrival = t2 - t1
lunch = (t3 - t2 - timedelta(hours=1))
departure = t4 - t3
print(arrival, lunch, departure)
解决方案 4:
python timedelta库应该可以满足您的需求。timedelta
减去两个datetime
实例时会返回 A。
import datetime
dt_started = datetime.datetime.utcnow()
# do some stuff
dt_ended = datetime.datetime.utcnow()
print((dt_ended - dt_started).total_seconds())
解决方案 5:
您有两个 datetime.time 对象,因此您只需使用 datetime.timedetla 创建两个 timedelta,然后像现在一样使用“-”操作数进行减法。以下是在不使用 datetime 的情况下减去两个时间的示例方法。
enter = datetime.time(hour=1) # Example enter time
exit = datetime.time(hour=2) # Example start time
enter_delta = datetime.timedelta(hours=enter.hour, minutes=enter.minute, seconds=enter.second)
exit_delta = datetime.timedelta(hours=exit.hour, minutes=exit.minute, seconds=exit.second)
difference_delta = exit_delta - enter_delta
difference_delta是您可以根据自己的理由使用的差异。
解决方案 6:
datetime.time
做不到 - 但你可以使用datetime.datetime.now()
start = datetime.datetime.now()
sleep(10)
end = datetime.datetime.now()
duration = end - start
解决方案 7:
timedelta
接受负(-)时间值。因此它可以像下面一样简单。
答案(单行,不包含日期)
datetime.timedelta(hours=exit.hour-enter.hour, minutes=exit.minute-enter.minute)
运行测试
import datetime
enter = datetime.time(hour=1, minute=30)
exit = datetime.time(hour=2, minute=0)
duration = datetime.timedelta(hours=exit.hour-enter.hour, minutes=exit.minute-enter.minute)
>>> duration
datetime.timedelta(seconds=1800)
解决方案 8:
datetime.time
不支持此功能,因为以这种方式减去时间几乎没有意义。datetime.datetime
如果您想这样做,请使用完整版。
解决方案 9:
import datetime
def diff_times_in_seconds(t1, t2):
# caveat emptor - assumes t1 & t2 are python times, on the same day and t2 is after t1
h1, m1, s1 = t1.hour, t1.minute, t1.second
h2, m2, s2 = t2.hour, t2.minute, t2.second
t1_secs = s1 + 60 * (m1 + 60*h1)
t2_secs = s2 + 60 * (m2 + 60*h2)
return( t2_secs - t1_secs)
# using it
diff_times_in_seconds( datetime.datetime.strptime( "13:23:34", '%H:%M:%S').time(),datetime.datetime.strptime( "14:02:39", '%H:%M:%S').time())
解决方案 10:
我遇到了与您类似的情况,最终使用了名为arrow的外部库。
它看起来是这样的:
>>> import arrow
>>> enter = arrow.get('12:30:45', 'HH:mm:ss')
>>> exit = arrow.now()
>>> duration = exit - enter
>>> duration
datetime.timedelta(736225, 14377, 757451)
解决方案 11:
import time
from datetime import datetime
def calcTime(enter,exit):
format="%H:%M:%S"
#Parsing the time to str and taking only the hour,minute,second
#(without miliseconds)
enterStr = str(enter).split(".")[0]
exitStr = str(exit).split(".")[0]
#Creating enter and exit time objects from str in the format (H:M:S)
enterTime = datetime.strptime(enterStr, format)
exitTime = datetime.strptime(exitStr, format)
return exitTime - enterTime
enter = datetime.today().time()
#Sleeping for 5 seconds before initializing the exit variable
time.sleep(5)
exit = datetime.today().time()
duration = calcTime(enter,exit)
print(f"Duration is {duration} (Hours:Minutes:Seconds)")
#Output: Duration is 0:00:05 (Hours:Minutes:Seconds)
如果有帮助,您可以使用如图所示的 calcTime 函数。
解决方案 12:
我认为以这种方式定义时间对象的原因是 timeA - timeB 的结果取决于日期,因为我们可能会遇到夏令时边界。
- 2025年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 项目管理必备:盘点2024年13款好用的项目管理软件
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)