将时间间隔转换为字符串<del>字符串到时间间隔</del>

问题描述 投票:0回答:4

我有一个

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

ios swift watchkit apple-watch healthkit
4个回答
4
投票

使用

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"
        }
    }

3
投票

这可以作为 TimeInterval 的扩展来完成。此版本还可以正确处理分钟/秒< 10 by padding them.

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

2
投票

不要将时间间隔变成字符串,而是将其变成可以添加到字典中的 NSNumber。 NSTimeInterval 只是一个双精度数,因此您可以轻松地将其转换为双精度数或从双精度数转换。

let timeInterval: TimeInterval = 915.012948989868

let dict = ["TimeIneterval": NSNumber(value: timeInterval)]

if let extractedTimeInterval: TimeInterval = dict["TimeIneterval"] as? TimeInterval {

    print(extractedTimeInterval)
}

0
投票

找到了原生的简单解决方案

DateComponentsFormatter

func formatted(interval: TimeInterval) -> String {
    let formatter = DateComponentsFormatter()
    formatter.allowedUnits = [.hour, .minute, .second]
    formatter.zeroFormattingBehavior = .dropLeading // drop leading zero values
    return formatter.string(from: timeInterval)
}
© www.soinside.com 2019 - 2024. All rights reserved.