2009-10-07 36 views
6

我有一段可怕的时间试图做一些应该很容易的事情。我有一个32025.89秒的NSNumber值。我需要在小时,分钟,秒中表示这一点。有没有一种方法可以把它吐出来?我似乎无法找到合适的格式化程序。NSNumber of seconds to minutes,minutes,seconds

+0

http://stackoverflow.com/questions/1237778/how-do-i-break-down-an-nstimeinterval-into-year-months-days-hours-minutes-and的重复。 – 2009-10-07 02:14:59

回答

8

您是否尝试过创建从一个NSDate和印刷,采用了NSDateFormatter

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

如果你需要几个小时,分钟和秒的各个值,使用NSDateComponents通过NALL的建议。

如果NSNumber代表超过一天,上面将不会打印正确的金额。可能是1天和1小时,并且只能打印01:00:00。在这种情况下,您应该手动计算小时,分钟和秒钟。

+0

这更符合我所寻找的线。我知道我可以计算数学,但我试图找到一种方式,基本上为我做了 - NSDateFormatter是我想,我需要什么。谢谢。 – SonnyBurnette 2009-10-07 01:00:42

+0

使用此代码我有一个用户谁得到了一个不正确的值 - 而不是03:00 180秒 - 他们得到了33:00。他们在一个4.5小时的时区,我想知道在他们的时区半小时是否可能导致这... – petenelson 2013-08-06 08:52:23

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

超过24小时无法工作(小时将去0等) – Jonny 2013-04-30 06:11:21

+0

我期望的是,它的工作正常。大。我upvote你的答案 – akk 2014-11-06 11:18:44

4

这里的无除了modf()任何库从math.h一种方式:

float fsec = 32025.89f, frac = 0; 
int milliseconds = (int)(modf(fsec, &frac) * 1000); 
int isec = (int)frac; 
int hours = isec/3600; 
int minutes = (isec % 3600)/60; 
int seconds = isec % 60; 
+0

我只注意到,你除以3600得到小时。这是一个错字,对吗?你的意思是说“fsec/3600”正确吗? – SonnyBurnette 2009-10-07 01:08:11

+0

“frexp”与此有什么关系? – 2009-10-07 01:11:06

+0

um ...它提取浮点数指针的小数部分和整数部分。在这种情况下,毫秒和秒。 – 2009-10-07 01:41:40

2

的NSNumber * valueForDisplay = [NSNumber的numberWithDouble: [自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)]; 
相关问题