2010-03-09 850 views
1

那天我得到了正确计算的帮助,但是我已经碰到了一个关于如何将其实现为代码的块。如何将数字转换为小时和分钟?

-(IBAction)done:(id)sender { 
    int result = (([startHours.text intValue] * 60) + [startMinutes.text intValue]) - 
    (([finishHours.text intValue] * 60) + [finishMinutes.text intValue]); 
    totalHours.text = [NSString stringWithFormat:@"%i", result/60]; 
    if (result < 0) { 
    totalHours.text = [NSString stringWithFormat:@"%d", result * -1]; 
    } 

以上是密码。但是,在文本字段中,它显示为总分钟数。我想转换它,以便显示为总小时数和分钟数(10.30)。我将如何在代码中做到这一点?

回答

3

Pheelicks的回答是OK。只是两个小的补充:在计算零件之前处理间隔符号,并使用更常见的时间格式:

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]; 
+0

我如何考虑夜班?如在开始时间等于13小时和完成小时等于2小时。我得到11个小时这是错误的,应该是15个小时。 – LawVS 2010-03-09 14:40:27

+1

如果您在一个应用程序会话内的时间间隔和开始时间总是少于结束时间,只需在计算零件之前进行签名检查。 if(result <0)result + = 12 * 60; – Vladimir 2010-03-09 14:53:34

+0

那么,我会如何编码? – LawVS 2010-03-09 14:58:26

5

如果结果是分钟的时间:

int minutes = result%60 
int hours = (result - minutes)/60 
totalHours.text = [NSString stringWithFormat:@"%d.%d", hours, minutes]; 
+0

代码中的位置是否会包含它? – LawVS 2010-03-09 14:10:28

+0

另外,如何在12小时以上的夜班中考虑因素? – LawVS 2010-03-09 14:28:44

0

尝试改变INT为float。

-(IBAction)done:(id)sender { 
    float result = (([startHours.text intValue] * 60) + [startMinutes.text intValue]) - 
    (([finishHours.text intValue] * 60) + [finishMinutes.text intValue]); 
    totalHours.text = [NSString stringWithFormat:@"%2.2f", result/60]; 
    if (result < 0) { 
    totalHours.text = [NSString stringWithFormat:@"%2.2f", result * -1]; 
    } 
相关问题