以小时为单位获取两个日期之间的长度

Posted

技术标签:

【中文标题】以小时为单位获取两个日期之间的长度【英文标题】:Get the length between two dates in hours 【发布时间】:2020-01-28 15:09:39 【问题描述】:

我正在使用 react-native-healthkit 将睡眠数据读入我的 react-native 应用程序,我需要找到一种方法来获取睡眠时间的总量。数据是这样读入的:

如果有人对处理这些数据的最佳方式有任何想法,请告诉我。

【问题讨论】:

“处理这些数据的最佳方式”非常广泛。你不明白哪一部分?如何将字符串变成日期?如何测量两个日期之间经过的时间?所有这些事情都已经在 Stack Overflow 上得到了完整的解释(很多次)。 【参考方案1】:
extension Date 

    /// Hours since current date to given date
    /// - Parameter date: the date
    func hours(since date: Date) -> Int 
        let calendar = Calendar.current
        let dateComponents = calendar.dateComponents([.hour], from: self, to: date)
        return dateComponents.month ?? 0
    


date2.hours(since: date1)

使用.timeIntervalSince 是一种不好的做法,因为有些时间可能比其他时间短。

【讨论】:

【参考方案2】:

如果有人对处理这些数据的最佳方式有任何想法,请告诉我。

这实际上取决于您如何解析 JSON 数据。我不会在这里介绍 JSON 解析,因为关于该主题的教程和博客文章有很多很多。 Here's one 以防你不确定从哪里开始。

您的目标是最终得到日期对象(Swift 中的Date,Objective-C 中的NSDate)。例如,如果您将值作为字符串,则可以使用DateFormatter 将字符串解析为Date 对象。

拥有这些日期对象后,您可以使用这些对象提供的操作来获取TimeInterval,这是一个double,表示以秒为单位的时间间隔。通过除以 3600 将其转换为小时:

let interval = endDate.timeIntervalSince(startDate)
let hours = interval / 3600

【讨论】:

【参考方案3】:

试试这个

   let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
    guard let startDate = dateFormatter.date(from: "yourStartDate"),
          let endDate = dateFormatter.date(from: "yourEndDate") else 
             return
        
    let difference = endDate.timeIntervalSince(startDate)

如果您的目标是 ios 13 及更高版本,您可以使用

endDate.hours(since: startDate)

而不是时间间隔

【讨论】:

不要试图通过自己编写来猜测 ISO8601DateFormatter。

以上是关于以小时为单位获取两个日期之间的长度的主要内容,如果未能解决你的问题,请参考以下文章

以分钟为单位计算两个日期之间的时间差

如何在 iOS 中计算两个日期之间的小时数

两个日期时间之间的 Spark/Hive 小时数

使用 Pandas 的两个时间戳之间的每小时时间序列(以分钟为单位)

有没有更有效的方法来获取以字节为单位的 32 位整数的长度?

如何在jquery中以秒为单位获取两个日期之间的差异?