将时间间隔转换为字符串 <del>将字符串转换为时间间隔</del>
Convert TimeInterval To String <del>String To Time Interval</del>
我有一个 TimeInterval
我不得不把它变成一个 String
这样它就可以添加到 Dictionary
中,从 Apple Watch 传递到 iPhone 通过WatchConnectivity
.
现在我 在 iPhone 上有 String
,我需要把它变回 TimeInterval
,但我可以似乎想明白了。
(我需要在显示锻炼持续时间的 UILabel
中显示它。)
有什么想法吗?
例如
观看:
00:15:15(时、分、秒)变成“915.012948989868”
let myDouble = computeDurationOfWorkout(withEvents: hkWorkout?.workoutEvents, startDate: hkWorkout?.startDate, endDate: hkWorkout?.endDate)
let myDoubleString = String(myDouble)
durationVariableString = myDoubleString
iPhone:
需要将“915.012948989868”变回00:15:15
不是把时间间隔变成一个字符串,而是把它变成一个可以添加到字典中的NSNumber。 NSTimeInterval 只是一个双精度数,因此您可以轻松地将它转换为双精度数。
let timeInterval: TimeInterval = 915.012948989868
let dict = ["TimeIneterval": NSNumber(value: timeInterval)]
if let extractedTimeInterval: TimeInterval = dict["TimeIneterval"] as? TimeInterval {
print(extractedTimeInterval)
}
使用 calendar.dateComponents
可以将 915
转换为 00:15:15
func stringFromTimeInterval (interval: String) -> String {
let endingDate = Date()
if let timeInterval = TimeInterval(interval) {
let startingDate = endingDate.addingTimeInterval(-timeInterval)
let calendar = Calendar.current
var componentsNow = calendar.dateComponents([.hour, .minute, .second], from: startingDate, to: endingDate)
if let hour = componentsNow.hour, let minute = componentsNow.minute, let seconds = componentsNow.second {
return "\(hour):\(minute):\(seconds)"
} else {
return "00:00:00"
}
} else {
return "00:00:00"
}
}
这可以作为 TimeInterval 的扩展来完成。此版本还通过填充正确处理 < 10 的分钟/秒。
extension TimeInterval {
var formatted: String {
let endingDate = Date()
let startingDate = endingDate.addingTimeInterval(-self)
let calendar = Calendar.current
var componentsNow = calendar.dateComponents([.hour, .minute, .second], from: startingDate, to: endingDate)
if let hour = componentsNow.hour, let minute = componentsNow.minute, let seconds = componentsNow.second {
return "\(String(format: "%02d", hour)):\(String(format: "%02d", minute)):\(String(format: "%02d", seconds))"
} else {
return "00:00:00"
}
}
}
并内联处理 String -> TimeInterval 转换。
TimeInterval(intervalAsString).formatted
我有一个 TimeInterval
我不得不把它变成一个 String
这样它就可以添加到 Dictionary
中,从 Apple Watch 传递到 iPhone 通过WatchConnectivity
.
现在我 在 iPhone 上有 String
,我需要把它变回 TimeInterval
,但我可以似乎想明白了。
(我需要在显示锻炼持续时间的 UILabel
中显示它。)
有什么想法吗?
例如
观看:
00:15:15(时、分、秒)变成“915.012948989868”
let myDouble = computeDurationOfWorkout(withEvents: hkWorkout?.workoutEvents, startDate: hkWorkout?.startDate, endDate: hkWorkout?.endDate)
let myDoubleString = String(myDouble)
durationVariableString = myDoubleString
iPhone:
需要将“915.012948989868”变回00:15:15
不是把时间间隔变成一个字符串,而是把它变成一个可以添加到字典中的NSNumber。 NSTimeInterval 只是一个双精度数,因此您可以轻松地将它转换为双精度数。
let timeInterval: TimeInterval = 915.012948989868
let dict = ["TimeIneterval": NSNumber(value: timeInterval)]
if let extractedTimeInterval: TimeInterval = dict["TimeIneterval"] as? TimeInterval {
print(extractedTimeInterval)
}
使用 calendar.dateComponents
可以将 915
转换为 00:15:15
func stringFromTimeInterval (interval: String) -> String {
let endingDate = Date()
if let timeInterval = TimeInterval(interval) {
let startingDate = endingDate.addingTimeInterval(-timeInterval)
let calendar = Calendar.current
var componentsNow = calendar.dateComponents([.hour, .minute, .second], from: startingDate, to: endingDate)
if let hour = componentsNow.hour, let minute = componentsNow.minute, let seconds = componentsNow.second {
return "\(hour):\(minute):\(seconds)"
} else {
return "00:00:00"
}
} else {
return "00:00:00"
}
}
这可以作为 TimeInterval 的扩展来完成。此版本还通过填充正确处理 < 10 的分钟/秒。
extension TimeInterval {
var formatted: String {
let endingDate = Date()
let startingDate = endingDate.addingTimeInterval(-self)
let calendar = Calendar.current
var componentsNow = calendar.dateComponents([.hour, .minute, .second], from: startingDate, to: endingDate)
if let hour = componentsNow.hour, let minute = componentsNow.minute, let seconds = componentsNow.second {
return "\(String(format: "%02d", hour)):\(String(format: "%02d", minute)):\(String(format: "%02d", seconds))"
} else {
return "00:00:00"
}
}
}
并内联处理 String -> TimeInterval 转换。
TimeInterval(intervalAsString).formatted