HKActivitySummary dateComponents落后一天

kye*_*kye 6 ios swift healthkit

出于某些奇怪的原因,HKActivitySummaryQuery为每个摘要执行返回的日期组件是落后的一天.查询从正确的日期返回数据,但dateComponents数据的日期落后一天.我已经尝试设置时区和语言环境,但结果保持不变.

摘要模型

struct ActivitySummary {
  init?(_ summary: HKActivitySummary) {
    var calendar = Calendar.current
    calendar.timeZone = TimeZone.current
    guard let date =  summary.dateComponents(for: calendar).date else { return nil }

    print("ORIGINAL: ", date.description(with: Locale.current))
    //Expected: Tuesday, January 30, 2018 at 7:00:00 PM Eastern Standard Time
    //Results: Monday, January 29, 2018 at 7:00:00 PM Eastern Standard Time

    let other = calendar.dateComponents( [ .year, .month, .day ], from: date)
    print("START OF DAY: ", date.startOfDay.description(with: Locale.current)) 
    //Expected: Tuesday, January 30, 2018 at 12:00:00 AM Eastern Standard Time
    //Results: Monday, January 29, 2018 at 12:00:00 AM Eastern Standard Time
  }
}
Run Code Online (Sandbox Code Playgroud)


HKAcitivitySummaryQuery

func summaryQuery(){
    let predicate = HKQuery.predicate(forActivitySummariesBetweenStart: fromDate.components(), end: toDate!.components())
   let query = HKActivitySummaryQuery(predicate: predicate) { (query, summaries, error) in
      guard let summaries = summaries, summaries.count > 0 else {
          return
      }
    // 
    var activitySummaries: [ActivitySummary] = []
    activitySummaries = summaries.compactMap({
        ActivitySummary($0)
      })
  }
}
Run Code Online (Sandbox Code Playgroud)

tar*_*del 1

也许您正在使用的日历是错误的。像这样设置你的日历:

let calendar = Calendar.current
Run Code Online (Sandbox Code Playgroud)