2017-08-09 56 views
1

我在odoo中使用下面的例子来举例说明。python 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)) 

例如:

如果开始= 7时57分21秒,完成= 16点25分36秒,暂停= 1 GET结果7小时

如果开始= 7时57分34秒,完成= 16:28:42,暂停= 1获得结果8小时

第一次和第二次不同的是3分钟,但结果是一个小时!

如何改变轮如果总时间> = 7小时30分01秒我需要在其他溶液7.5导致8(7小时30分钟)

+0

'其他的解决方案7或7.5'?你想要7还是7.5? – qvpham

+0

'round(7.5)== 8'和'round(7.4)== 7 == int(7.4)'和'round(7.6)== 8 == int(7.6 + 1)' –

+0

@julivico对不起我的错误,我编辑问题7小时30分钟01秒我需要结果8在其他解决方案7.5(7小时30分钟) – Pointer

回答

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 = 17.5n=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)) 
+0

不错的例子,是否可以使用两个选项,例如。总时间> = 7小时30分00秒= 8小时,总时间<7小时30分00秒= 7.5 – Pointer

+0

或者'rount(2 * total_time)/ 2.0' –

+0

@匿名:很好的建议。但是,对于'(7.501 * 2)/2.0=7.5'必须是8? – qvpham

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 
+0

Tnx的帮助,但使用你的例子后,我得不到正确的结果。 – Pointer