fuz*_*oat 82 iphone cocoa-touch objective-c
如果我有一个设置为200.0的NSTimeInterval,有没有办法将其转换为00:03:20,我想我可以用它初始化NSDate然后使用NSDateFormatter使用HH:mm:ss.我的问题是,有一个快速的方法来做到这一点,还是我必须自己分解数字并使用[NSString stringWithFormat: %02d:%02d:%02d, myHour, myMin, mySec]?
Mat*_*uch 193
NSDateFormatter除了除法和模数之外,不需要使用或其他任何东西.NSTimeInterval只是一个包含秒的双倍.
迅速
func stringFromTimeInterval(interval: NSTimeInterval) -> String {
let interval = Int(interval)
let seconds = interval % 60
let minutes = (interval / 60) % 60
let hours = (interval / 3600)
return String(format: "%02d:%02d:%02d", hours, minutes, seconds)
}
Run Code Online (Sandbox Code Playgroud)
Objective-C的
- (NSString *)stringFromTimeInterval:(NSTimeInterval)interval {
NSInteger ti = (NSInteger)interval;
NSInteger seconds = ti % 60;
NSInteger minutes = (ti / 60) % 60;
NSInteger hours = (ti / 3600);
return [NSString stringWithFormat:@"%02ld:%02ld:%02ld", (long)hours, (long)minutes, (long)seconds];
}
Run Code Online (Sandbox Code Playgroud)
jrc*_*jrc 100
在iOS 8上,使用NSDateComponentsFormatter.
NSDateComponentsFormatter *dateComponentsFormatter = [[NSDateComponentsFormatter alloc] init];
NSLog(@"%@", [dateComponentsFormatter stringFromTimeInterval:200.0]);
Run Code Online (Sandbox Code Playgroud)
输出"3:20".
NSDateComponentsFormatter *dateComponentsFormatter = [[NSDateComponentsFormatter alloc] init];
dateComponentsFormatter.zeroFormattingBehavior = NSDateComponentsFormatterZeroFormattingBehaviorPad;
dateComponentsFormatter.allowedUnits = (NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond);
NSLog(@"%@", [dateComponentsFormatter stringFromTimeInterval:200.0]);
Run Code Online (Sandbox Code Playgroud)
输出"0:03:20".
Sco*_*ner 16
Swift 3版本的onmyway133的答案:
import Foundation
func format(_ duration: TimeInterval) -> String {
let formatter = DateComponentsFormatter()
formatter.zeroFormattingBehavior = .pad
formatter.allowedUnits = [.minute, .second]
if duration >= 3600 {
formatter.allowedUnits.insert(.hour)
}
return formatter.string(from: duration)!
}
print(format(12)) // 0:12
print(format(65)) // 1:05
print(format(1750)) // 29:10
print(format(3890)) // 1:04:50
print(format(45720)) // 12:42:00
Run Code Online (Sandbox Code Playgroud)
Ros*_*hit 10
一些额外的代码行,但我觉得使用NSDateComponents会给出更精确的值.
- (NSString *)getTimeRepresentationFromDate:(NSDate *)iDate withTimeInterval:(NSTimeInterval)iTimeInterval {
NSString *aReturnValue = nil;
NSDate *aNewDate = [iDate dateByAddingTimeInterval:iTimeInterval];
unsigned int theUnits = NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
NSCalendar *aCalender = [NSCalendar currentCalendar];
NSDateComponents *aDateComponents = [aCalender components:theUnits fromDate:iDate toDate:aNewDate options:0];
aReturnValue = [NSString stringWithFormat:@"%d:%d:%d", [aDateComponents hour], [aDateComponents minute], [aDateComponents second]];
return aReturnValue;
}
Run Code Online (Sandbox Code Playgroud)
在Swift 2中,iOS 8+.这确保我们只在必要时显示小时
func format(duration: NSTimeInterval) -> String {
let formatter = NSDateComponentsFormatter()
formatter.zeroFormattingBehavior = .Pad
if duration >= 3600 {
formatter.allowedUnits = [.Hour, .Minute, .Second]
} else {
formatter.allowedUnits = [.Minute, .Second]
}
return formatter.stringFromTimeInterval(duration) ?? ""
}
Run Code Online (Sandbox Code Playgroud)
所以你有了
print(format(12)) // 0:12
print(format(65)) // 1:05
print(format(1750)) // 29:10
print(format(3890)) // 1:04:50
print(format(45720)) // 12:42:00
Run Code Online (Sandbox Code Playgroud)
DateComponentsFormatter().string(from: <# TimeInterval #>)
Run Code Online (Sandbox Code Playgroud)
前任:
DateComponentsFormatter().string(from: 59.0)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
51764 次 |
| 最近记录: |