以小时为单位获取两个日期之间的长度
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。以上是关于以小时为单位获取两个日期之间的长度的主要内容,如果未能解决你的问题,请参考以下文章
使用 Pandas 的两个时间戳之间的每小时时间序列(以分钟为单位)