Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 为什么HealthKit返回的时间不正确?_Ios_Swift_Healthkit - Fatal编程技术网

Ios 为什么HealthKit返回的时间不正确?

Ios 为什么HealthKit返回的时间不正确?,ios,swift,healthkit,Ios,Swift,Healthkit,我试图让每小时的步数计算出来,为此我做到了: func retrieveSteps(completion: @escaping (_ stepsCount: Double) -> Void) { let stepsCount = HKQuantityType.quantityType(forIdentifier: .stepCount) let date = Date() let calendar = Calendar(identifier: .gregorian

我试图让每小时的步数计算出来,为此我做到了:

func retrieveSteps(completion: @escaping (_ stepsCount: Double) -> Void) {
    let stepsCount = HKQuantityType.quantityType(forIdentifier: .stepCount)

    let date = Date()
    let calendar = Calendar(identifier: .gregorian)
    let newDate = calendar.startOfDay(for: date)

    let predicate = HKQuery.predicateForSamples(withStart: newDate, end: date, options: [.strictStartDate])
    var interval = DateComponents()
    interval.hour = 1

    let query = HKStatisticsCollectionQuery(quantityType: stepsCount!, quantitySamplePredicate: predicate, options: [.cumulativeSum], anchorDate: newDate, intervalComponents: interval)

    query.initialResultsHandler = { query, result, error in
        if let stats = result {
            stats.enumerateStatistics(from: newDate, to: date) { statistics, _ in
                if let quantity = statistics.sumQuantity() {

                    let steps = quantity.doubleValue(for: HKUnit.count())
                    print("Steps: \(steps) for: \(statistics.endDate)")

                    completion(steps)
                }
            }
        }
    }

    HKHealthStore().execute(query)
}
当我执行它时,会得到错误的日期值。例如:

Steps: 28.3782023430627 for: 2017-10-22 10:00:00 +0000

但在健康应用程序上显示时间是11:58。为什么我要10点?如何改进它?

您从HKStatisticsCollectionQuery返回的统计对象表示一个时间范围,即您提供的间隔组件的大小,而不是该时间范围内特定样本的日期。如果您想在HealthKit中查找最近一次步骤计数样本的日期,应该使用HKSampleQuery。

尝试格式化并输出小时、分钟和秒。@Lumialxk但它将如何帮助我?在10:00和11:58之间-2小时=/我想知道10:00是你的时区,它只按天缩放。@Lumialxk也许我得到了错误的值?你在哪个时区?您很可能处于CEST UTC+2,而此处给出的时间可以通过+0000后缀识别UTC。这只是转换成当地时间的问题。。。