WebAPIなどのJSON文字列で”yyyy-MM-ddTHH:mm:ss+0900″のような形式をDateTimeとして扱う場合があります。このフォーマットはISO-8601で定められた国際規格とのことです。Swiftは、ISO-8601の国際規格フォーマットの文字列をDate型に変換するためのISO8601DateFormatterというクラスが用意されています。下記のコードは、ISO-8601形式の文字列からDateに変換する例です。
import Foundation let s1: String = "2020/10/08T13:08:00+0900" let fmt: ISO8601DateFormatter = ISO8601DateFormatter() let d1:Date = fmt.date(from: s1)!
上記コードの結果は「2020-10-08T04:08:00Z」になりました。9時間のズレがありますがこれは協定世界時(UTC)です。ISO8601DateFormatterは、Formatterを継承して作成されています。それに加えISO8601DateFormatterの内部には、timeZoneを設定できます。timeZoneを設定することで、日本時間表示が可能になります。
import Foundation let s1: String = "2020/10/08T13:08:00+0900" let fmt: ISO8601DateFormatter = ISO8601DateFormatter() fmt.timeZone = TimeZone(identifier: "Asia/Tokyo")! let d1:Date = fmt.date(from: s1)!
timeZoneにTimeZone(identifier: “Asia/Tokyo”)日本時間を設定しています。このtimeZoneを設定することでprintなどでアウトプットさせる場合も日本時間として表示されます。
Date型をISO-8601文字列に変換するには下記のような記述ができます。
let fmt: ISO8601DateFormatter = ISO8601DateFormatter() fmt.timeZone = TimeZone(identifier: "Asia/Tokyo")! print( fmt.string(from: Date()) )