Se você tem como alvo o iOS 8 ou o OS X 10.10 ou superior, isso ficou muito mais fácil. A nova NSDateComponentsFormatter
classe permite que você converta um dado NSTimeInterval
de seu valor em segundos em uma string localizada para mostrar ao usuário. Por exemplo:
Objective-C
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
também permite que essa saída seja em formatos mais longos. Mais informações podem ser encontradas no artigo NSFormatter do NSHipster . E dependendo das classes com as quais você já está trabalhando (se não NSTimeInterval
), pode ser mais conveniente passar ao formatador uma instância de NSDateComponents
, ou dois NSDate
objetos, o que também pode ser feito por meio dos métodos a seguir.
Objective-C
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#>) {
// ...
}