ios - 仅比较 Date 对象中的时差

标签 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 中有我可以做到的功能吗?

最佳答案

您可以使用Calendar 提取DateComponents,然后将其中一个的日、月、年与另一个的时、分、秒组合成另一个日期 对象。然后,您可以使用文档齐全的方法比较共享相同日期的两个 Date 对象。

例如,给定date1date2,我们可以用date1的日期计算date3,但是时间日期 2。然后我们可以将 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)!

然后,获取 date1date3 之间的分钟数:

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

关于ios - 仅比较 Date 对象中的时差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40062131/

相关文章:

ios - Alamofire 4 Swift 3 参数编码自定义

ios - 有没有办法在 iPhone 上获取启动的 VPN 隧道的套接字描述符,以便我可以在 C++ 库中使用它

javascript - CSS 变量未在 Mobile Safari 上更新

ios - EAAccessoryDidConnectNotification 不触发

ios - 应用程序在安装时不询问位置服务权限 WhenInUse?

ios - 从 App Delegate 打开导航 Controller

ios - 为什么会出现 4 MB 使用率和 320 MB 可用内存警告?

ios - HKHealthStore deleteObjects 报错 Domain=com.apple.healthkit Code=100 "Transaction failure."

ios - 如何在我的 swift 应用程序中对绘制 svg 路径进行动画处理?

swift - 遍历数组的最后一个索引以外的所有索引