Si su objetivo es iOS 8 o OS X 10.10 o superior, esto es mucho más fácil. La nueva NSDateComponentsFormatter
clase le permite convertir un NSTimeInterval
valor dado de su valor en segundos a una cadena localizada para mostrársela al usuario. Por ejemplo:
C objetivo
NSTimeInterval interval = 326.4;
NSDateComponentsFormatter *componentFormatter = [[NSDateComponentsFormatter alloc] init];
componentFormatter.unitsStyle = NSDateComponentsFormatterUnitsStylePositional;
componentFormatter.zeroFormattingBehavior = NSDateComponentsFormatterZeroFormattingBehaviorDropAll;
NSString *formattedString = [componentFormatter stringFromTimeInterval:interval];
NSLog(@"%@",formattedString); // 5:26
Rápido
let interval = 326.4
let componentFormatter = NSDateComponentsFormatter()
componentFormatter.unitsStyle = .Positional
componentFormatter.zeroFormattingBehavior = .DropAll
if let formattedString = componentFormatter.stringFromTimeInterval(interval) {
print(formattedString) // 5:26
}
NSDateCompnentsFormatter
también permite que esta salida esté en formas más largas. Puede encontrar más información en el artículo NSFormatter de NSHipster . Y dependiendo de las clases con las que ya esté trabajando (si no NSTimeInterval
), puede ser más conveniente pasar al formateador una instancia de NSDateComponents
, o dos NSDate
objetos, lo que también se puede hacer a través de los siguientes métodos.
C objetivo
NSString *formattedString = [componentFormatter stringFromDate:<#(NSDate *)#> toDate:<#(NSDate *)#>];
NSString *formattedString = [componentFormatter stringFromDateComponents:<#(NSDateComponents *)#>];
Rápido
if let formattedString = componentFormatter.stringFromDate(<#T##startDate: NSDate##NSDate#>, toDate: <#T##NSDate#>) {
// ...
}
if let formattedString = componentFormatter.stringFromDateComponents(<#T##components: NSDateComponents##NSDateComponents#>) {
// ...
}