objective c - Formato NSTimeInterval
objective-c ios (4)
Quiero tomar mi NSTimeInterval
y formatearlo en una cadena como 00:00:00 (horas, minutos, segundos). ¿Cuál es la mejor manera de hacer esto?
"Lo mejor" es subjetivo. La forma más sencilla es esta:
unsigned int seconds = (unsigned int)round(myTimeInterval);
NSString *string = [NSString stringWithFormat:@"%02u:%02u:%02u",
seconds / 3600, (seconds / 60) % 60, seconds % 60];
ACTUALIZAR
A partir de iOS 8.0 y Mac OS X 10.10 (Yosemite), puede usar NSDateComponentsFormatter
si necesita una solución compatible con el entorno local. Ejemplo:
NSTimeInterval interval = 1234.56;
NSDateComponentsFormatter *formatter = [[NSDateComponentsFormatter alloc] init];
formatter.allowedUnits = NSCalendarUnitHour | NSCalendarUnitMinute |
NSCalendarUnitSecond;
formatter.zeroFormattingBehavior = NSDateComponentsFormatterZeroFormattingBehaviorPad;
NSString *string = [formatter stringFromTimeInterval:interval];
NSLog(@"%@", string);
// output: 0:20:34
Sin embargo, no veo una manera de forzarlo a que emita dos dígitos por hora, por lo que si eso es importante para usted, deberá usar una solución diferente.
Desde iOS 8.0 ahora existe NSDateComponentsFormatter
que tiene un método stringFromTimeInterval:
.
[[NSDateComponentsFormatter new] stringFromTimeInterval:timeInterval];
Una versión rápida de la respuesta de @Michael Frederick:
let duration: NSTimeInterval = ...
let durationDate = NSDate(timeIntervalSince1970: duration)
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "HH:mm:ss"
dateFormatter.timeZone = NSTimeZone(name: "UTC")
let durationString = dateFormatter.stringFromDate(durationDate)
NSTimeInterval interval = ...;
NSDate *date = [NSDate dateWithTimeIntervalSince1970:interval];
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"HH:mm:ss"];
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];
NSString *formattedDate = [dateFormatter stringFromDate:date];
NSLog(@"hh:mm:ss %@", formattedDate);