0
我的问题是我将一个日期保存到字符串中,并作为CoreData中的日期。后来,我需要从字符串中取出日期,比较两者,并发现它们是相同的日期。现在,平等检查失败了。两个日期相隔7小时,但分钟正确。我认为这是一个时区问题,但我无法弄清楚如何解决它。相同日期...但不同?也许时区混淆
的该日期的起源
我有一个日期选择器的日期,我保存CoreData是这样的:那之后我格式化日期,并插入日期为
task.setValue(dueDatePicker.date, forKey: "dueDate")
消息:
let dateFormatter = DateFormatter()
let dateFormat = DateFormatter.Style.medium
let timeFormat = DateFormatter.Style.short
dateFormatter.dateStyle = dateFormat
dateFormatter.timeStyle = timeFormat
let formattedDate = dateFormatter.string(from: date)
let message = ("Upcoming task on \(formattedDate)")
该消息成为通知的一部分。数小时或者数天后(当通知火灾和用户选择的动作),我得到的CoreData日期:
fetchRequest.predicate = NSPredicate(format: "dueDate = %@", dateOfTask)
然后我分解的通知消息和获取日期:
let start = notifString.range(of: "on ")
let rawDate = notifString[(start.upperBound)!..<(notifString.endIndex)]
let dateFormatter = DateFormatter()
dateFormatter.timeZone =
dateFormatter.dateFormat = "MMM-d-yyyy, H:mm a"
let dateFromString = dateFormatter.date(from: rawDate)
最后,我比较它们。目前时间显然是相同的时间和日期,但时区相差约7小时。但是,我不想仅强制匹配的时区(例如,可能会强制UTC),因为这可能不适用于其他位置的用户。
我该如何检索这两个日期而没有得到这个明显的时区问题?
我没有看到类似的代码,如 “dateFormatter.locale =区域设置(标识符: ”EN“)”。所以你没有给出时区。 –
我不完全明白。这些本地通知或推送通知是?如果他们是推送通知,那么你如何生成一个对用户有意义的日期字符串,因为他们可能在不同的时区?如果它们是本地通知,那么您是否可以保证通知中的日期字符串位于用户当前的时区,并相应地设置日期格式化程序中的时区? –
如果数据来自UILocalNotificstion,那么您应该将相关数据存储在'userInfo'字典中,而不是试图解析字符串 – Paulw11