仅比较Date对象中的时差

yas*_*sin 1 ios swift swift3

我有两个Date对象,我只想比较它们之间的时差,而忽略日期。将是这样的:

dt1 =(日期)2016-09-22 20:05:01 UTC
dt2 =(日期)2016-08-20 22:06:00 UTC

dt1和dt2之差为2小时或121分钟。

Swift中有一个我可以做到的功能吗?

Rob*_*Rob 5

您可以使用Calendar提取DateComponents,然后将一个月的日,月和年与另一个的小时,分​​钟和秒合并到另一个Date对象中。然后,您可以Date使用详细记录的方法比较共享同一日期的两个对象。

例如,给定date1date2,我们可以date3用日期为date1,但时间为进行计算date2。然后,我们可以将其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)!
Run Code Online (Sandbox Code Playgroud)

然后,获取date1和之间的分钟数date3

let minutes = calendar.dateComponents([.minute], from: date1, to: date3).minute!
Run Code Online (Sandbox Code Playgroud)

或小时和分钟:

let difference = calendar.dateComponents([.hour, .minute], from: date1, to: date3)
let hours = difference.hour!
let minutes = difference.minute!
Run Code Online (Sandbox Code Playgroud)

或者,如果要将其显示给用户,通常会使用它DateComponentsFormatter来获得一个不错的本地化字符串表示形式:

let formatter = DateComponentsFormatter()
formatter.unitsStyle = .full
formatter.allowedUnits = [.hour, .minute]  // or [.minute]
let string = formatter.string(from: date1, to: date3)!
Run Code Online (Sandbox Code Playgroud)