2017-04-25 89 views
1
for emp in employee: 
    contract_id = contract_pool.search(cr, uid, [('employee_id','=',emp.employee_id.id)], context=context) 
    for contract in contract_pool.browse(cr, uid, contract_id, context=context): 
     for attendance in contract.working_hours.attendance_ids: 
      if day == attendance.dayofweek: 
      planned_time_in = attendance.hour_from 
      planned_time_out = attendance.hour_to 
      planned_wrkng_hrs = planned_time_out - planned_time_in 
      print planned_wrkng_hrs 
    actual_time_in = emp.time_in 
    actual_time_out = emp.time_out 
    actual_wrkd_hrs = actual_time_out - actual_time_in 
    print actual_wrkd_hrs 
    hrs_short = planned_wrkng_hrs - actual_wrkd_hrs 
    print hrs_short 

這給了我輸出:
9.00
8.57
0.43
我如何獲得:
9:00
8:57
00:03
浮點值在這裏被減去而不是時間。Odoo - 減去蟒蛇2 「時間」 字段

+1

轉換時間,第二個,然後做的操作,一旦你得到的結果在第二劃分它由60分鐘和3600小時 –

回答

0

假定時間值的格式是這樣在你的榜樣,你可以把它用做這樣

time_in_mins = int(original_time) * 60 + (original_time - int(original(time)) * 100 

的東西,然後使用新的「標準化」的價值觀做所有的計算轉變爲分鐘,因爲午夜,然後將其轉換回您的首選格式進行顯示或存儲。

0

希望這有助於你^^:

from datetime import time 
from datetime import datetime, date 
import math 
# on thing hour part cannot be more that 23 and 
first_time = 23.5 
secend_time = 23.0 

# convert float to hour and minute 
f_hour, f_time = int(math.floor(first_time)), int(round((first_time % 1) * 60)) 
s_hour, s_time = int(math.floor(secend_time)), int(round((secend_time % 1) * 60)) 
# create datetime object to perform substraction 
duration = datetime.combine(date.min,time(f_hour,f_time))- datetime.combine(date.min,time(s_hour,s_time)) 
print "total minute between this two time is %s minutes " % (duration.total_seconds()/60) 

結果:

total minute between this two time is 30.0 minutes 
+0

什麼是date.min在這裏? – Aiswarya

+0

它只是一個分鐘的日期0001-01-01與時間創建一個日期,所以結果是0001-01-01 23:30:00 0001-01-01 23:00:00不適合你? – Cherif

+0

不是,它沒有爲我工作:( – Aiswarya