2010-03-09 81 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