İOS 8 veya OS X 10.10'u veya üzerini hedefliyorsanız, bu çok daha kolay hale geldi. Yeni NSDateComponentsFormatter
sınıf NSTimeInterval
, kullanıcıya göstermek için belirli bir değeri saniye cinsinden yerelleştirilmiş bir dizeye dönüştürmenize olanak tanır . Örneğin:
Amaç-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
Swift
let interval = 326.4
let componentFormatter = NSDateComponentsFormatter()
componentFormatter.unitsStyle = .Positional
componentFormatter.zeroFormattingBehavior = .DropAll
if let formattedString = componentFormatter.stringFromTimeInterval(interval) {
print(formattedString) // 5:26
}
NSDateCompnentsFormatter
ayrıca bu çıktının daha uzun formlarda olmasına izin verir. NSHipster'ın NSFormatter makalesinde daha fazla bilgi bulunabilir . Ve halihazırda hangi sınıflarla çalıştığınıza bağlı olarak (değilse NSTimeInterval
), biçimlendiriciye bir NSDateComponents
veya iki NSDate
nesnenin bir örneğini iletmek daha uygun olabilir , bu da aşağıdaki yöntemlerle de yapılabilir.
Amaç-C
NSString *formattedString = [componentFormatter stringFromDate:<#(NSDate *)#> toDate:<#(NSDate *)#>];
NSString *formattedString = [componentFormatter stringFromDateComponents:<#(NSDateComponents *)#>];
Swift
if let formattedString = componentFormatter.stringFromDate(<#T##startDate: NSDate##NSDate#>, toDate: <#T##NSDate#>) {
// ...
}
if let formattedString = componentFormatter.stringFromDateComponents(<#T##components: NSDateComponents##NSDateComponents#>) {
// ...
}