Lyd*_*dia 50 nstimeinterval ios swift
我的代码在这里:
func stringFromTimeInterval(interval:NSTimeInterval) -> NSString {
var ti = NSInteger(interval)
var ms = ti * 1000
var seconds = ti % 60
var minutes = (ti / 60) % 60
var hours = (ti / 3600)
return NSString(format: "%0.2d:%0.2d:%0.2d",hours,minutes,seconds,ms)
}
Run Code Online (Sandbox Code Playgroud)
在输出中毫秒给出错误的结果.请给出如何正确找到毫秒的想法.
Mat*_*uch 113
Swift支持浮点数的余数计算,所以我们可以使用% 1.
var ms = Int((interval % 1) * 1000)
Run Code Online (Sandbox Code Playgroud)
如:
func stringFromTimeInterval(interval: TimeInterval) -> NSString {
let ti = NSInteger(interval)
let ms = Int((interval % 1) * 1000)
let seconds = ti % 60
let minutes = (ti / 60) % 60
let hours = (ti / 3600)
return NSString(format: "%0.2d:%0.2d:%0.2d.%0.3d",hours,minutes,seconds,ms)
}
Run Code Online (Sandbox Code Playgroud)
结果:
stringFromTimeInterval(12345.67) "03:25:45.670"
Run Code Online (Sandbox Code Playgroud)
斯威夫特4:
extension TimeInterval{
func stringFromTimeInterval() -> String {
let time = NSInteger(self)
let ms = Int((self.truncatingRemainder(dividingBy: 1)) * 1000)
let seconds = time % 60
let minutes = (time / 60) % 60
let hours = (time / 3600)
return String(format: "%0.2d:%0.2d:%0.2d.%0.3d",hours,minutes,seconds,ms)
}
}
Run Code Online (Sandbox Code Playgroud)
使用:
self.timeLabel.text = player.duration.stringFromTimeInterval()
Run Code Online (Sandbox Code Playgroud)
Jak*_*nin 24
SWIFT 3扩展
我认为这种方式更容易看出每件作品的来源,因此您可以更轻松地根据您的需要进行修改
extension TimeInterval {
private var milliseconds: Int {
return Int((truncatingRemainder(dividingBy: 1)) * 1000)
}
private var seconds: Int {
return Int(self) % 60
}
private var minutes: Int {
return (Int(self) / 60 ) % 60
}
private var hours: Int {
return Int(self) / 3600
}
var stringTime: String {
if hours != 0 {
return "\(hours)h \(minutes)m \(seconds)s"
} else if minutes != 0 {
return "\(minutes)m \(seconds)s"
} else if milliseconds != 0 {
return "\(seconds)s \(milliseconds)ms"
} else {
return "\(seconds)s"
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 17
基于@ matthias-bauch答案,在Objective-C中等效.
+ (NSString *)stringFromTimeInterval:(NSTimeInterval)timeInterval
{
NSInteger interval = timeInterval;
NSInteger ms = (fmod(timeInterval, 1) * 1000);
long seconds = interval % 60;
long minutes = (interval / 60) % 60;
long hours = (interval / 3600);
return [NSString stringWithFormat:@"%0.2ld:%0.2ld:%0.2ld,%0.3ld", hours, minutes, seconds, (long)ms];
}
Run Code Online (Sandbox Code Playgroud)
小智 13
Swift 5。没有毫秒和一些条件格式(即,如果有 0 小时,则不显示小时)。
extension TimeInterval{
func stringFromTimeInterval() -> String {
let time = NSInteger(self)
let seconds = time % 60
let minutes = (time / 60) % 60
let hours = (time / 3600)
var formatString = ""
if hours == 0 {
if(minutes < 10) {
formatString = "%2d:%0.2d"
}else {
formatString = "%0.2d:%0.2d"
}
return String(format: formatString,minutes,seconds)
}else {
formatString = "%2d:%0.2d:%0.2d"
return String(format: formatString,hours,minutes,seconds)
}
}
}
Run Code Online (Sandbox Code Playgroud)
vad*_*ian 12
适用于iOS 8 +的swift 3解决方案,macOS 10.10+,如果小时数的零填充无关紧要:
func stringFromTime(interval: TimeInterval) -> String {
let ms = Int(interval.truncatingRemainder(dividingBy: 1) * 1000)
let formatter = DateComponentsFormatter()
formatter.allowedUnits = [.hour, .minute, .second]
return formatter.string(from: interval)! + ".\(ms)"
}
print(stringFromTime(interval: 12345.67)) // "3:25:45.670"
Run Code Online (Sandbox Code Playgroud)
Moh*_*our 10
斯威夫特4:
extension TimeInterval{
func stringFromTimeInterval() -> String {
let time = NSInteger(self)
let ms = Int((self.truncatingRemainder(dividingBy: 1)) * 1000)
let seconds = time % 60
let minutes = (time / 60) % 60
let hours = (time / 3600)
return String(format: "%0.2d:%0.2d:%0.2d.%0.3d",hours,minutes,seconds,ms)
}
}
Run Code Online (Sandbox Code Playgroud)
使用:
self.timeLabel.text = player.duration.stringFromTimeInterval()
Run Code Online (Sandbox Code Playgroud)
Swift 4,不使用.remainder(返回错误的值):
func stringFromTimeInterval(interval: Double) -> NSString {
let hours = (Int(interval) / 3600)
let minutes = Int(interval / 60) - Int(hours * 60)
let seconds = Int(interval) - (Int(interval / 60) * 60)
return NSString(format: "%0.2d:%0.2d:%0.2d",hours,minutes,seconds)
}
Run Code Online (Sandbox Code Playgroud)
我认为大多数答案都已过时,如果要显示表示时间间隔的字符串,则应始终使用DateComponentsFormatter,因为它将为您处理填充和本地化。
| 归档时间: |
|
| 查看次数: |
71710 次 |
| 最近记录: |