我熟悉获取睡眠数据的典型方法,但事实证明,在特定的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小时窗口)获得小时睡眠?我觉得我必须误解一些关于睡眠查询的基本知识,或者围绕这个问题的时间数学。
答案 0 :(得分:0)
HealthKit没有办法插入HKCategorySample
类型的查询结果。您的查询必须与您要使用的整个睡眠样本相匹配,并且您必须自己进行数学计算,以确定样本中有多少属于您感兴趣的日期间隔。< / p>