找出在 Swift 中存储为字符串的 2 次之间的差异 4

Finding the difference between 2 times stored as strings in Swift 4

我有 2 次存储为字符串,我试图找到它们之间的小时和分钟差异并将其显示在标签中,我很确定我必须使用 DateFormatter 来获取日期来自字符串,但从那时起我就迷失了获得差异的最佳方法,我读过的一些东西说使用间隔,其他人说使用日历。我似乎无法想出任何对我来说很清楚的事情。

var dailyTimeOut: NSDate {
    get{
        let formatter = DateFormatter()
        formatter.dateStyle = .medium
        return formatter.date(from: finishTimeLabel.text!)! as NSDate
    }
}

func calculateHours() {

    let interval = dailyTimeOut.timeIntervalSince(dailyTimeIn as Date)
    // print("\(stringFromTimeInterval(interval: interval))")

    let totalTime = stringFromTimeInterval(interval: interval)

    totalTimeLabel.text = totalTime
}

func stringFromTimeInterval(interval: TimeInterval) -> String {
    let interval = Int(interval)
    let minutes = (interval / 60) % 60
    let hours = (interval / 3600)
    return String(format: "%02d:%02d", hours, minutes)
}

首先,您需要 Date 个对象作为您的两个字符串:

let string1 = "13:00"
let string2 = "15:30"

guard let time1 = time(from: string1), let time2 = time(from: string2) else {
    print("not valid time strings")
    return
}

在哪里

private let timeFormatter: DateFormatter = {
    let formatter = DateFormatter()
    formatter.dateFormat = "HH:mm"
    formatter.locale = Locale(identifier: "en_US_POSIX")
    return formatter
}()

private func time(from timeString: String) -> Date? {
    return timeFormatter.date(from: timeString)
}

然后,如果您希望它是一个格式良好的字符串,您可以使用 DateComponentsFormatter:

let formatter = DateComponentsFormatter()
formatter.allowedUnits = [.hour, .minute]
let string = formatter.string(from: time1, to: time2)!

产量:

2:30

或者,如果您想要小时和分钟作为数值,您可以使用 Calendar method dateComponents(_:from:to:):

let components = Calendar.current.dateComponents([.hour, .minute], from: time1, to: time2)
let hour = components.hour!
let minutes = components.minute!