我在下面的例子中使用了odoo中的圆形时间。
@api.one
@api.depends('start','finish','pause')
def total(self):
for rec in self:
time1 = datetime.strptime(rec.start, "%Y-%m-%d %H:%M:%S")
time2 = datetime.strptime(rec.finish, "%Y-%m-%d %H:%M:%S")
rec.total_time = round(((time2 - time1).seconds / float(60*60) - self.pause))
例如:
如果start = 07:57:21,则完成= 16:25:36,暂停= 1获得结果7小时
如果start = 07:57:34,则完成= 16:28:42,暂停= 1获得结果8小时
第一次和第二次不同是3分钟但结果是一个小时!
如果总时间> = 7小时30分01秒如何变换我在其他解决方案7.5中需要结果8(7小时30分钟)
答案 0 :(得分:3)
对于"%Y-%m-%d %H:%M:%S"
,您可以使用DEFAULT_SERVER_DATETIME_FORMAT
from odoo.tools import DEFAULT_SERVER_DATETIME_FORMAT
对于您的问题,您可以使用round(x, n)
。例如:
round(7.4, 0) = 7
round(7.5, 0) = 8
round(7.5, 1) = 7.5
您需要n = 1
7.5
和{标准'n=0
round
。您可以使用7.5
检查((7.5 - 0.5) % 1) == 0
并使用boolean
直接将其从int
转换为int()
一般解决方案是:
@api.one
@api.depends('start','finish','pause')
def total(self):
for rec in self:
time1 = datetime.strptime(rec.start, DEFAULT_SERVER_DATETIME_FORMAT)
time2 = datetime.strptime(rec.finish, DEFAULT_SERVER_DATETIME_FORMAT)
total_time = (time2 - time1).seconds / float(60*60) - self.pause
rec.total_time = round(total_time, int(((total_time - 0.5) % 1) == 0))
答案 1 :(得分:1)
@api.one
@api.depends('start','finish','pause')
def total(self):
for rec in self:
time1 = datetime.strptime(rec.start, DEFAULT_SERVER_DATETIME_FORMAT)
time2 = datetime.strptime(rec.finish, DEFAULT_SERVER_DATETIME_FORMAT)
total_time = (time2 - time1).seconds / float(60*60) - self.pause
total_time = 2*total_time
if 2*total_time%1 <=0.5 :
res = round(total_time)
else :
res = round(2*total_time)
rec.total_time = res