找出在 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!
我有 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!