私の問題私は文字列に日付をCoreDataに保存することです。後で、私は文字列から日付を引き出し、2つを比較し、それらが同じ日付であることを発見する必要があります。今、平等チェックは失敗します。 2つの日付は7時間離れていますが、分が正しいです。私はそれがタイムゾーンの問題だと思うが、私はそれを解決する方法を理解できない。同じ日付...でも違いますか?たぶんタイムゾーンの混乱
task.setValue(dueDatePicker.date, forKey: "dueDate")
私は日付をフォーマットしにその日付を挿入その後:日付の
起源は
私はこのようにCoreDataに保存日付ピッカーから日付を持っていますメッセージ:
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などのように)一致するタイムゾーンを強制的に実行する必要はありません。
明らかにタイムゾーンの問題が発生することなく、両方の日付を取得するにはどうすればよいですか?
。だからあなたはタイムゾーンを与えていない。 –
私は完全に理解していません。これらのローカル通知またはプッシュ通知はありますか?彼らが通知をプッシュしている場合、それらが異なるタイムゾーンにあるかもしれないことを考えると、どのようにユーザーにとって意味のある日付文字列を生成していますか?ローカルの通知であれば、通知の日付文字列がユーザーの現在のタイムゾーンにあるとみなして、それに応じて日付フォーマッタのタイムゾーンを設定することはできませんか? –
データがUILocalNotificstionから来ている場合は、文字列を解析しようとするのではなく、関連するデータを 'userInfo'ディクショナリに保存する必要があります。 – Paulw11