如何从格式化的时间字符串值中获取时间差
how to get time difference form formatted time string values
你好如何获取两个字符串值的时间差
startTime = "09:00 AM"
EndTime =“05:30 PM”
func timeDifferenceBetweenTwoTime(startTime: String, endTime:String) ->CGFloat{
let start = startTime
let end = endTime
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "hh:mm a"
if let startDate = dateFormatter.date(from: start),
let endDate = dateFormatter.date(from: end) {
let hours: CGFloat = CGFloat(Calendar.current.dateComponents([.hour], from: startDate, to: endDate < startDate ? Calendar.current.date(byAdding: .day, value: 1, to: endDate) ?? endDate : endDate).hour ?? 00 )
return hours
}
return 00.00
}
预期的结果是08.50
,但对我来说却是8.0
您只需要获取分钟而不是小时并将其除以 60。顺便说一下,您还应该将 dateFormatter 的默认日期设置为今天:
func timeDifferenceBetweenTwoTime(startTime: String, endTime: String) -> CGFloat {
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.defaultDate = Calendar(identifier: .iso8601).startOfDay(for: Date())
dateFormatter.dateFormat = "hh:mm a"
if let startDate = dateFormatter.date(from: startTime),
var endDate = dateFormatter.date(from: endTime) {
if startDate > endDate {
endDate = Calendar.current.date(byAdding: .day, value: 1, to: endDate)!
}
let minute = Calendar.current.dateComponents([.minute], from: startDate, to: endDate).minute!
return CGFloat(minute) / 60
}
return 0
}
let startTime = "09:00 AM"
let endTime = "05:30 PM"
timeDifferenceBetweenTwoTime(startTime: startTime, endTime: endTime) // 8.5
您要求的是小时差。日历函数 dateComponents(_:from:to:)
将为您提供日期之间的整小时数(如果您需要的话)。如果不询问分钟数,则会被截断。
如果您想要小时和整分钟,您可以要求小时和分钟,然后做一些数学运算将它们结合起来,或者按照 Leo 的建议只要求分钟,然后将分钟除以 60。
您也可以使用 endDate.timeIntervalSinceReferenceDate-startDate.timeIntervalSinceReferenceDate)/3600.0
。这将为您提供一个 Double 表示两个日期之间的确切小时数,包括秒和秒的分数。 (不相关,因为您的源日期仅指定小时和分钟,但在其他情况下可能会有用。)
你好如何获取两个字符串值的时间差
startTime = "09:00 AM" EndTime =“05:30 PM”
func timeDifferenceBetweenTwoTime(startTime: String, endTime:String) ->CGFloat{
let start = startTime
let end = endTime
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.dateFormat = "hh:mm a"
if let startDate = dateFormatter.date(from: start),
let endDate = dateFormatter.date(from: end) {
let hours: CGFloat = CGFloat(Calendar.current.dateComponents([.hour], from: startDate, to: endDate < startDate ? Calendar.current.date(byAdding: .day, value: 1, to: endDate) ?? endDate : endDate).hour ?? 00 )
return hours
}
return 00.00
}
预期的结果是08.50
,但对我来说却是8.0
您只需要获取分钟而不是小时并将其除以 60。顺便说一下,您还应该将 dateFormatter 的默认日期设置为今天:
func timeDifferenceBetweenTwoTime(startTime: String, endTime: String) -> CGFloat {
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.defaultDate = Calendar(identifier: .iso8601).startOfDay(for: Date())
dateFormatter.dateFormat = "hh:mm a"
if let startDate = dateFormatter.date(from: startTime),
var endDate = dateFormatter.date(from: endTime) {
if startDate > endDate {
endDate = Calendar.current.date(byAdding: .day, value: 1, to: endDate)!
}
let minute = Calendar.current.dateComponents([.minute], from: startDate, to: endDate).minute!
return CGFloat(minute) / 60
}
return 0
}
let startTime = "09:00 AM"
let endTime = "05:30 PM"
timeDifferenceBetweenTwoTime(startTime: startTime, endTime: endTime) // 8.5
您要求的是小时差。日历函数 dateComponents(_:from:to:)
将为您提供日期之间的整小时数(如果您需要的话)。如果不询问分钟数,则会被截断。
如果您想要小时和整分钟,您可以要求小时和分钟,然后做一些数学运算将它们结合起来,或者按照 Leo 的建议只要求分钟,然后将分钟除以 60。
您也可以使用 endDate.timeIntervalSinceReferenceDate-startDate.timeIntervalSinceReferenceDate)/3600.0
。这将为您提供一个 Double 表示两个日期之间的确切小时数,包括秒和秒的分数。 (不相关,因为您的源日期仅指定小时和分钟,但在其他情况下可能会有用。)