代码之家  ›  专栏  ›  技术社区  ›  rayray

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

  •  -1
  • rayray  · 技术社区  · 6 年前

    我有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)
    }
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Rob Md Fahim Faez Abir    6 年前

    首先,你想要 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 方法 dateComponents(_:from:to:) :

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