我有兩個Date
對象,我只想比較它們之間的時間差異,忽略日期。 會是這樣的:只比較日期對象中的時間差異
DT1 =(日期)2016年9月22日20時05分01秒UTC
DT2 =(日)2016年8月20日22:06:00 UTC
和dt1和dt2之間的差異將是2小時或121分鐘。
Swift中有一個函數可以做到嗎?
我有兩個Date
對象,我只想比較它們之間的時間差異,忽略日期。 會是這樣的:只比較日期對象中的時間差異
DT1 =(日期)2016年9月22日20時05分01秒UTC
DT2 =(日)2016年8月20日22:06:00 UTC
和dt1和dt2之間的差異將是2小時或121分鐘。
Swift中有一個函數可以做到嗎?
您可以使用Calendar
提取DateComponents
,然後從一個以小時,分鐘,和其他的第二合併日,月和年到另一個Date
對象。然後,您可以使用有據可查的方法比較共享相同日期的兩個對象。
例如,給定date1
和date2
:
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, .second], from: date1, to: date3).minute!
或者,如果你想顯示給用戶,您通常會使用DateComponentsFormatter
來獲得一個不錯的本地化字符串表示形式:
let formatter = DateComponentsFormatter()
formatter.unitsStyle = .full
formatter.allowedUnits = [.minute]
let string = formatter.string(from: date1, to: date3)!
使用NSCalenar
,然後找出小時,分鐘的土地,然後找到它們之間的差異。
忽略日期,您可以使用timeIntervalSince(date:)來獲取兩個日期之間的秒數。
斯威夫特3 Extention比較時間只有
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)