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