【Swift5】ディクショナリ等に入れるDate型の初期値の設定が面倒。

タイトルのままですが、[String:Any]等で、AnyにはString型Bool型Int型等ダイレクトに入力できる物が多いのですが、Date型も入れれないのかと考えてみました。
結局よくわからず、String型で日時を作ってDateFormatterを設定してDate型に変換してから出ないと無理っぽい感じでした。

なのでやったことの忘備録です。

import UIKit

let dateNow = Date() //現在の時刻
var dateDic: [String:Any] = [:] //ディクショナリ型

//①ディクショナリ型に直接date型を入れたいが無理っぽい。
dateDic["dateNow"] = dateNow
dateDic["dateString"] = "2020-04-20 11:15:17 +0000"

print(dateDic["dateNow"] as! Date)
//print(dateDic["dateString"] as! Date )  //String型なので当然エラーになる


//②なのでDate型を作るためにDateFormatterをセット
let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")//USなので時差に注意。
dateFormatter.dateFormat = "yyyy'-'MM'-'dd' 'HH':'mm':'ss'"
dateFormatter.timeZone = TimeZone(secondsFromGMT: 0)

//文字列をDateFormatterでDate型にして辞書に収納
let string = "2020-04-20 11:15:17"
let dateString = dateFormatter.date(from: string)
dateDic["dateString"] = dateString

print(dateDic["dateString"] as! Date) //Date型として出せる。

//③おまけDate型を日本用に出力。
let f = DateFormatter()
f.timeStyle = .full
f.dateStyle = .full
f.locale = Locale(identifier: "ja_JP")//日本なので時差に注意。

print(f.string(from: dateDic["dateString"] as! Date))

こんなんでます。

2020-04-20 23:38:46 +0000
2020-04-20 11:15:17 +0000
2020年4月20日 月曜日 20時15分17秒 日本標準時

ちょいとめんどいですね。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です