【问题标题】:Searching by NSDate in Coredata not working - Swift在 Coredata 中按 NSDate 搜索不起作用 - Swift
【发布时间】:2016-01-11 00:10:52
【问题描述】:

我正在通过特定 NSDate 在 coredata 中搜索记录,但它没有返回任何结果。它也不会抛出任何错误..

当我遍历所有记录时,我可以将日期输出到控制台。

这里是谓词.. created 是 NSDate

let resultPredicate = NSPredicate(format: "created == %@", created)

..在挖掘了更多之后,问题似乎出在我处理时间戳的 JSON 时:

var createdJSON:String = subJson["created"].string!
var dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
dateFormatter.timeZone = NSTimeZone(abbreviation: "EST")

var dateConverted:NSDate = dateFormatter.dateFromString(createdJSON)!

时间存储在东部时区下的 MySQL 数据库中,也许这是我的错误?即使我可以将该 JSON 响应转换为看起来是相同的值,但也许它从一开始就必须是 UTC?

-编辑-

转换为 UTC 没有帮助。

【问题讨论】:

  • 请记住,NSDate 精确到毫秒。您不可能有任何日期等于 created 到毫秒值。
  • 啊,可能是这样......它是从“yyyy-MM-dd HH:mm:ss”的MySQL格式存储的,让我看看添加ms会做什么
  • 将毫秒设置为 nsdate 然后使用它不起作用...

标签: ios swift nsdate


【解决方案1】:

如果你搜索一个日期范围,我认为你会有更好的运气,例如

let resultPredicate = NSPredicate(format: "created >= %@ AND created <= %@", startDate, endDate)

其中 startDate 和 endDate 是您希望结果介于两者之间的 NSDates。

【讨论】:

  • 我不明白为什么设置 1 秒的 +/- 范围有效,但设置 1 毫秒的范围不会产生任何结果。我存储的时间戳的最小部分是秒。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-18
  • 2017-08-29
  • 1970-01-01
  • 2011-07-19
  • 1970-01-01
相关资源
最近更新 更多