2016-10-15 80 views
0

我有兩個Date對象,我只想比較它們之間的時間差異,忽略日期。 會是這樣的:只比較日期對象中的時間差異

DT1 =(日期)2016年9月22日20時05分01秒UTC
DT2 =(日)2016年8月20日22:06:00 UTC

和dt1和dt2之間的差異將是2小時或121分鐘。

Swift中有一個函數可以做到嗎?

回答

4

您可以使用Calendar提取DateComponents,然後從一個以小時,分鐘,和其他的第二合併日,月和年到另一個Date對象。然後,您可以使用有據可查的方法比較共享相同日期的兩個對象。

例如,給定date1date2

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)! 

然後,爲了獲取date1date3之間的分鐘數:

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)! 
0

使用NSCalenar,然後找出小時,分鐘的土地,然後找到它們之間的差異。

0

斯威夫特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)