我怎样才能从healthkit获得最近10天?

时间:2017-10-09 22:19:43

标签: ios objective-c nsdate nspredicate health-kit

我从我的客观c应用程序中读取了我的iPhone的健康值。 我只需要阅读过去10天,但我无法进行查询。

我尝试使用以下代码将查询添加到谓词中:

NSPredicate *explicitforDay =
[NSPredicate predicateWithFormat:@"%K >= %@ AND %K <= %@",
 HKPredicateKeyPathDateComponents, startDateComponents,
 HKPredicateKeyPathDateComponents, endDateComponents];

然后我尝试了这个:

NSPredicate *explicitforDay = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"%@ < %%@ AND %@ >= %%@", HKPredicateKeyPathStartDate
                                                                    , HKPredicateKeyPathEndDate], myFirstDate, myEndDate];

但在输出中,我可以看到这样的一些:

  

(startDate&lt; CAST(529279732.871222,&#34; NSDate&#34;)AND endDate&gt; =   CAST(527983732.871222,&#34; NSDate&#34;))

为什么要打印CAST和错误的日期值? 谢谢!

2 个答案:

答案 0 :(得分:0)

日期很简单。我已经为此here发布了更长的解释。

因此在声明中加入了一个简单的数字。它是您日期的数字表示。要将该数字视为日期,它将转换为给定类型"NSDATE"

答案 1 :(得分:0)

Swift 4解决方案:

在我的示例中,我使用了方便方法HKQuery.predicateForSamples,这是一个谓词,用于开始和结束日期在指定时间间隔内的样本。

你需要阅读最后10篇 以下是从现在起10天开始约会的日期Date()

过去-10天

startDate是:Calendar.current.date(byAdding: .day, value: -10, to: Date())!

注意:您可以使用您希望下一天和前一天日期的日期,只需更改Date()。

endDate是:Date() - &gt; (当前日期)

所以我的谓词看似于指定的时间间隔。

 let predicate = HKQuery.predicateForSamples(
                     withStart: startDate.beginningOfDay(), 
                     end: endDate, 
                     options: [.strictStartDate,.strictEndDate])

你可以在我的谓词中看到我添加beginningOfDay()方法这将允许我从00:00开始日期

beginningOfDay()方法说明:

func beginningOfDay() -> Date {
        let beginningOfDay = Calendar.current.startOfDay(for: self)
        return beginningOfDay
    }

您还可以创建谓词格式字符串,以创建等同谓词,如heathkitDoc中所述。

let explicitTimeInterval = NSPredicate(format: "%K >= %@ AND %K < %@",
                                       HKPredicateKeyPathEndDate, myStartDate,
                                       HKPredicateKeyPathStartDate, myEndDate)

希望能做到这一点。