Продолжение из превосходного ответа Mercator...
я рекомендовал бы:
Теперь базируется, Вы - реальные различия, а не 'автоматические' изменения, которые VB6 попыталась применить.
Вы пытались создать 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. В таком случае вам следует рассчитать часы, минуты и секунды вручную.
Вот способ без каких-либо библиотек, кроме 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;
Если вы не хотите просто разделить его, попробуйте следующее. Это может быть достаточно близко для ваших целей. Примечание: Он не учитывает точность до долей секунды. ( 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]);