我有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)
}
答案 0 :(得分:1)
First, you want Date
objects for your two strings:
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
}
Where
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)
}
Then, if you want it as a nicely formatted string, you can use DateComponentsFormatter
:
let formatter = DateComponentsFormatter()
formatter.allowedUnits = [.hour, .minute]
let string = formatter.string(from: time1, to: time2)!
Yielding:
2:30
Or, if you want the hour and minute as numerical values, you can use Calendar
method dateComponents(_:from:to:)
:
let components = Calendar.current.dateComponents([.hour, .minute], from: time1, to: time2)
let hour = components.hour!
let minutes = components.minute!