我有两个Date
对象,我只想比较它们之间的时间差,忽略日期。可能类似于:
dt1=(日期(2016-09-22 20:05:01 UTC
dt2=(日期(2016-08-20 22:06:00 UTC
并且dt1和dt2之间的差将是2小时或121分钟。
Swift中有我可以做到的功能吗?
您可以使用Calendar
提取DateComponents
,然后将其中的天、月和年与另一个的小时、分钟和秒组合到另一个Date
对象中。然后,您可以使用有据可查的方法来比较共享同一日期的两个Date
对象。
例如,给定date1
和date2
,我们可以用date1
的日期而不是date2
的时间来计算date3
。然后我们可以将date1
与这个新的date3
:进行比较
let calendar = Calendar.current
let components2 = calendar.dateComponents([.hour, .minute, .second], from: date2)
let date3 = calendar.date(bySettingHour: components2.hour!, minute: components2.minute!, second: components2.second!, of: date1)!
然后,为了获得date1
和date3
之间的分钟数:
let minutes = calendar.dateComponents([.minute], from: date1, to: date3).minute!
或小时和分钟:
let difference = calendar.dateComponents([.hour, .minute], from: date1, to: date3)
let hours = difference.hour!
let minutes = difference.minute!
或者,如果你想向用户展示这一点,你通常会使用DateComponentsFormatter
来获得一个很好的本地化字符串表示:
let formatter = DateComponentsFormatter()
formatter.unitsStyle = .full
formatter.allowedUnits = [.hour, .minute] // or [.minute]
let string = formatter.string(from: date1, to: date3)!
忽略日期,您可以使用timeIntervalSince(date:(来获取两个日期之间的秒数。
使用NSCalenar
,然后找出小时、分钟,然后找出它们之间的差异。
Swift 3扩展,用于比较仅时间
import UIKit
extension Date {
func compareTimeOnly(to: Date) -> ComparisonResult {
let calendar = Calendar.current
let components2 = calendar.dateComponents([.hour, .minute, .second], from: to)
let date3 = calendar.date(bySettingHour: components2.hour!, minute: components2.minute!, second: components2.second!, of: self)!
let seconds = calendar.dateComponents([.second], from: self, to: date3).second!
if seconds == 0 {
return .orderedSame
} else if seconds > 0 {
// Ascending means before
return .orderedAscending
} else {
// Descending means after
return .orderedDescending
}
}
}
一些测试
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
let date1 = Date()
var date2 = dateFormatter.date(from: "2016-12-26T12:12:12")!
let result = date1.compareTimeOnly(to: date2)
print(result.rawValue)
func findsecond(s_date:String,e_date:String) -> Int {
//set date formate
let Dateformatter = DateFormatter()
Dateformatter.dateFormat = "dd MMM yyyy h:mm a"
//convert string to date
let dateold = Dateformatter.date(from: start_date)!
let datenew = Dateformatter.date(from: end_date)!
//use default datecomponents with two dates
let calendar1 = Calendar.current
let components = calendar1.dateComponents([.second], from: dateold, to: datenew)
let seconds = components.second
print("Seconds: (seconds)")
return seconds!
}