2016-12-31 5 views
0

私の問題私は文字列に日付を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などのように)一致するタイムゾーンを強制的に実行する必要はありません。

明らかにタイムゾーンの問題が発生することなく、両方の日付を取得するにはどうすればよいですか?

+0

。だからあなたはタイムゾーンを与えていない。 –

+0

私は完全に理解していません。これらのローカル通知またはプッシュ通知はありますか?彼らが通知をプッシュしている場合、それらが異なるタイムゾーンにあるかもしれないことを考えると、どのようにユーザーにとって意味のある日付文字列を生成していますか?ローカルの通知であれば、通知の日付文字列がユーザーの現在のタイムゾーンにあるとみなして、それに応じて日付フォーマッタのタイムゾーンを設定することはできませんか? –

+1

データがUILocalNotificstionから来ている場合は、文字列を解析しようとするのではなく、関連するデータを 'userInfo'ディクショナリに保存する必要があります。 – Paulw11

答えて

0

露骨に明らかに、@ Paulw11としてのUserInfoを使用するには、提案:私は "(:EN dateFormatter.locale =ロケール識別子 "")" のようなコードを見やった

newLocalNotif.fireDate = dueDateWarningTime 
    newLocalNotif.alertBody = message 
    newLocalNotif.timeZone = TimeZone.autoupdatingCurrent 
    newLocalNotif.soundName = UILocalNotificationDefaultSoundName 
    newLocalNotif.category = "DueDates" 
    newLocalNotif.userInfo = ["name": name, "desc": desc, "dueDate" : date] 
関連する問題