python odoo 中的循环时间
Round time in python odoo
我在 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))
例如:
if start = 07:57:21 , finish = 16:25:36, pause = 1 get result 7 小时
if start = 07:57:34 , finish = 16:28:42, pause = 1 get result 8 小时
第一次和第二次相差3分钟,但结果是一个小时!
如果总时间 >= 7 小时 30 分 01 秒,我需要在其他解决方案 7.5(7 小时 30 分钟)中得到结果 8
对于 "%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
代表 'standard' round
。您可以使用 ((7.5 - 0.5) % 1) == 0
检查 7.5
并直接使用 int()
将其从 boolean
转换为 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))
@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
我在 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))
例如:
if start = 07:57:21 , finish = 16:25:36, pause = 1 get result 7 小时
if start = 07:57:34 , finish = 16:28:42, pause = 1 get result 8 小时
第一次和第二次相差3分钟,但结果是一个小时!
如果总时间 >= 7 小时 30 分 01 秒,我需要在其他解决方案 7.5(7 小时 30 分钟)中得到结果 8
对于 "%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
代表 'standard' round
。您可以使用 ((7.5 - 0.5) % 1) == 0
检查 7.5
并直接使用 int()
boolean
转换为 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))
@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