我在尝试做一些应该很容易的事情时度过了一段糟糕的时光。我的 NSNumber 值为 32025.89 秒。我需要用小时、分钟、秒来表示。有没有吐出来的方法?我似乎找不到合适的格式化程序。
问问题
13911 次
4 回答
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]);
于 2009-10-07T00:32:03.697 回答
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];
如果您需要小时、分钟和秒的各个值,请NSDateComponents
按照 nall 的建议使用。
NSNumber
如果表示超过一天,则上述内容不会打印正确的金额。它可能是 1 天 1 小时,它只会打印 01:00:00。在这种情况下,您应该手动计算小时、分钟和秒。
于 2009-10-07T00:37:50.053 回答
4
这是一种没有任何库的方法,除了modf()
from 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;
于 2009-10-07T00:38:23.073 回答
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)];
于 2012-04-18T19:28:02.100 回答