几小时,分钟,秒的NSNumber

时间:2009-10-07 00:11:10

标签: objective-c cocoa nsnumber

我正在努力做一些应该很容易的事情。我的NSNumber值为32025.89秒。我需要以小时,分钟,秒表示。有没有一种吐出来的方法?我似乎找不到合适的格式化程序。

4 个答案:

答案 0 :(得分:9)

如果您不想将其分开,请尝试这样做。它可能足够接近您的目的。 注意:它不考虑亚秒精度。 (setSecond需要NSInteger)。

NSDateComponents* c = [[[NSDateComponents alloc] init] autorelease];
[c setSecond:32025.89];

NSCalendar* cal = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]
                   autorelease];

NSDate* d = [cal dateFromComponents:c];

NSDateComponents* result = [cal components:NSHourCalendarUnit |
                                           NSMinuteCalendarUnit |
                                           NSSecondCalendarUnit
                                  fromDate:d];

NSLog(@"%d hours, %d minutes, %d seconds",
    [result hour], [result minute], [result second]);

答案 1 :(得分:9)

您是否尝试过创建NSDate并使用NSDateFormatter进行打印?

NSDate *date = [NSDate dateWithTimeIntervalSince1970:[theNumber doubleValue]];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"HH:mm:ss"];
NSLog(@"%@", [formatter stringFromDate:date]); 
[formatter release];

如果您需要小时,分钟和秒的各个值,请按照nall的建议使用NSDateComponents

如果NSNumber代表超过一天,则上述内容将无法打印正确的金额。它可能是1天1小时,它只打印01:00:00。在这种情况下,您应该手动计算小时,分钟和秒。

答案 2 :(得分:4)

除了来自modf()的{​​{1}}之外,这是一种没有任何库的方式:

math.h

答案 3 :(得分:2)

NSNumber * valueForDisplay = [NSNumber numberWithDouble:               [self valueForDisplay:clockName]];

NSNumber *totalDays = [NSNumber numberWithDouble:
         ([valueForDisplay doubleValue] / 86400)];
NSNumber *totalHours = [NSNumber numberWithDouble:
         (([valueForDisplay doubleValue] / 3600) -
          ([totalDays intValue] * 24))];
NSNumber *totalMinutes = [NSNumber numberWithDouble:
         (([valueForDisplay doubleValue] / 60) -
         ([totalDays intValue] * 24 * 60) -
         ([totalHours intValue] * 60))];
NSNumber *totalSeconds = [NSNumber numberWithInt:
         ([valueForDisplay intValue] % 60)];