如何使用HealthKit获取特定日期的24小时睡眠数据?

时间:2018-01-24 01:44:59

标签: ios swift time health-kit

我熟悉获取睡眠数据的典型方法,但事实证明,在特定的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小时窗口)获得小时睡眠?我觉得我必须误解一些关于睡眠查询的基本知识,或者围绕这个问题的时间数学。

1 个答案:

答案 0 :(得分:0)

HealthKit没有办法插入HKCategorySample类型的查询结果。您的查询必须与您要使用的整个睡眠样本相匹配,并且您必须自己进行数学计算,以确定样本中有多少属于您感兴趣的日期间隔。< / p>