我整天都在思考这个问题,似乎无法找到解决方案。我有一个可以查询“健康数据存储”的健身程序。在predicateForSamples(withStart:myStartDate,end:myEndDate)中,我发现从datePicker获取日期会发送时间,因此我的查询不会全天返回结果。因此,我想出如果我采用该datePicker日期并将其转换为开始和结束格式,我的问题将得到解决。但是,使用let date = dateFormatter.date(from:dateString)返回正确的日期,但是两个函数的时间都返回为04:00:00 +0000。
[如果有人提出建议,请随时伸出援手。非常感谢!
func convertStartDate(StartDate: Date) -> Date {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyy-MM-dd '00':'00':'01' +0000"
let dateString = dateFormatter.string(from: StartDate)
print("convertingStartDate() - \(dateString)")
let date = dateFormatter.date(from: dateString)
print(date as Any)
return date!
}
func convertEndDate(EndDate: Date) -> Date {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyy-MM-dd '23':'59':'59' +0000"
let dateString = dateFormatter.string(from: EndDate)
print("convertingEndDate() - \(dateString)")
let date = dateFormatter.date(from: dateString)
return date!
}
这应该可以解决您的问题
func convertStartDate(StartDate: Date) -> Date {
let dateFormatter = DateFormatter()
dateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
dateFormatter.dateFormat = "yyy-MM-dd '00':'00':'01' +0000"
let dateString = dateFormatter.string(from: StartDate)
dateFormatter.dateFormat = "yyy-MM-dd HH:mm:ss +0000"
let date = dateFormatter.date(from: dateString)
print(date as Any)
return date!
}
func convertEndDate(EndDate: Date) -> Date {
let dateFormatter = DateFormatter()
dateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
dateFormatter.dateFormat = "yyy-MM-dd '23':'59':'59' +0000"
let dateString = dateFormatter.string(from: EndDate)
dateFormatter.dateFormat = "yyy-MM-dd HH:mm:ss +0000"
let date = dateFormatter.date(from: dateString)
return date!
}
除上述以外,实际上是通过设置dateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
来解决的,因为距格林尼治标准时间的秒数是您的问题。