前提
以下の条件の場合にダイアログを表示したい
・日付ピッカーで選択した日付が、今日と比べて30日以降だった場合
実現したいこと
ピッカーで選択した値のString(例:20220618)をDate型にしたい
発生している問題・エラーメッセージ
Date型には変換できるのですが、
ピッカーで選択した値の1日前の日に変換されてしまいます。(以下は例です)
・ピッカーで選択した値:20220618
・Date型に変換後の値:2022-06-17 15:00:00 +0000
該当のソースコード
dateSelected には「20220618」という文字列が入っています。
swift
1let selectedValue = DateUtils.dateFromString(string: dateSelected, format: "yyyyMMdd") 2print(selectedValue) // 2022-06-17 15:00:00 +0000 3 4let today = Date() 5let after30Days = Calendar.current.date(byAdding: .day, value: 30, to: today)! 6print(after30Days) // 2022-07-18 07:45:26 +0000 7 8// 判定のif文 9if selectedValue > after30Days { 10 // ダイアログ表示メソッド 11}
dateFromString メソッド
swift
1import Foundation 2 3class DateUtils { 4 class func dateFromString(string: String, format: String) -> Date { 5 let formatter: DateFormatter = DateFormatter() 6 formatter.dateFormat = format 7 return formatter.date(from: string)! 8 } 9}
試したこと①
1日前になってしまっているのではなく、
9時間ズレてしまっているのではないかと思い、
dateFromString メソッドに以下を追加したが何もかわらず、、
swift
1formatter.calendar = Calendar(identifier: .gregorian) 2formatter.locale = Locale(identifier: "ja_JP")
試したこと②
記事を参考に以下を追加してもダメでした。
参考:【Swift4】Date()の9時間のズレを調整【Date】
swift
1formatter.timeZone = TimeZone.current 2formatter.locale = Locale.current
試したこと③
UTCだと9時間ズレてしまうみたいなので、
明示的にロケールとタイムゾーンを指定する。
※多分、試したこと②とやっていることはかわらない
swift
1formatter.locale = Locale(identifier: "ja_JP") 2formatter.timeZone = TimeZone(identifier: "JST")
引き続き自分でも調査いたしますが、
有識者の方の力をお借りできれば幸いです。
よろしくお願いいたします。
補足情報(FW/ツールのバージョンなど)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/06/18 09:39
退会済みユーザー
2022/06/18 09:50 編集
2022/06/21 07:44 編集
2022/06/23 06:26