2010-03-09 29 views
0

好吧,保理夜班工作時間計算器

感謝大家對我的幫助。但是,有一個絆腳石 - 我需要考慮夜班。例如,如果開始時間是13小時,結束時間是2小時 - 我希望它是15小時,而不是11小時。這是代碼:

-(IBAction)done:(id)sender { 
    int result = (([startHours.text intValue] * 60) + [startMinutes.text intValue]) - 
    (([finishHours.text intValue] * 60) + [finishMinutes.text intValue]); 

    int minutes = abs(result)%60; 
    int hours = (abs(result) - minutes)/60; 
    totalHours.text = [NSString stringWithFormat:@"%02d:%02d", hours, minutes]; 
    if (finishHours.text > startHours.text) { 
    totalHours.text= [NSString stringWithFormat:@"%02d:%02d", hours, minutes]; 
    } 
+0

從13H爲02H是13小時不15.你試試我加入到從昨天你的問題的代碼示例? http://stackoverflow.com/questions/2401600/calculation-conundrum-how-do-i-influence-another-textfield/2401674#2401674 – DyingCactus 2010-03-09 15:05:29

回答

1

首先,你應該從結尾減去開始,而不是相反。

您想使用模運算:

-(IBAction)done:(id)sender { 
int result = (([finishHours.text intValue] * 60) + [finishMinutes.text intValue]) - 
(([startHours.text intValue] * 60) + [startMinutes.text intValue]); 

// Use modular arithmetic to find absolute time difference 
result = (result + 24*60)%(24*60); 

// Display answer 
int minutes = result%60; 
int hours = (result - minutes)/60; 
totalHours.text = [NSString stringWithFormat:@"%02d:%02d", hours, minutes]; 
if (finishHours.text > startHours.text) { 
    totalHours.text= [NSString stringWithFormat:@"%02d:%02d", hours, minutes]; 
} 
+0

我嘗試過,但如果我把13h作爲開始和2h作爲完成,我得到-11而不是13. – LawVS 2010-03-09 15:39:59

+0

我忘了C處理這樣的負面%...看到更新的答案 – pheelicks 2010-03-09 16:43:25

+0

你是明星!非常感謝你,菲利克斯。 :) – LawVS 2010-03-10 10:03:42