在python odoo的回合时间

时间:2017-08-09 08:53:01

标签: python openerp odoo-9 odoo-10

我在下面的例子中使用了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分钟)

2 个答案:

答案 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