我熟悉获取睡眠数据的典型方法,但事实证明,在特定的24小时窗口中获取几个小时的睡眠时间要困难得多。
我可以设置一个谓词来获取在特定时间内开始或结束的样本,但很多时候这些样本跨越了日期界限。如果我晚上10点上床睡觉,凌晨4点起床,然后从早上5点睡到8点,那么很难从10-4样本中提取昨天的部分。
典型的谓词可能如下所示(使用以下日期扩展):
extension Date {
var today: Date {
return Calendar.current.date(byAdding: .day, value: 0, to: midnight)!
}
var yesterday: Date {
return Calendar.current.date(byAdding: .day, value: -1, to: midnight)!
}
}
let predicate = HKQuery.predicateForSamples(withStart: Date().yesterday, end: Date().today, options: [])然后获取一个样本,然后做一些事情来获得秒/分钟/小时:
let seconds = sample.endDate.timeIntervalSince(sample.startDate)但是,当开始日期不一定是昨天,或者结束日期不一定在今天之前时,这就会产生问题。
我可以开始在开始和结束日期周围做一些特殊的大小写,但它变得有点复杂。有没有一种简单的方法可以让你从昨天开始就睡上几个小时(从午夜到午夜的准确24小时窗口)?我觉得我一定是误解了一些关于睡眠查询的基础知识,或者是关于这方面的时间数学。
发布于 2018-01-25 00:29:53
HealthKit无法对HKCategorySample类型的查询结果进行插值。您的查询必须与您想要处理的全部睡眠样本相匹配,并且您必须自己计算,以计算出有多少样本落在您感兴趣的日期间隔内。
https://stackoverflow.com/questions/48413614
复制相似问题