[iOS 10] ISO8601DateFormatter について
はじめに
こんにちは。モバイルアプリサービス部の平屋です。
本記事では iOS 10 で追加された ISO8601DateFormatter
クラスを使ってできることを紹介していきます。
ISO8601DateFormatter とは
ISO8601DateFormatter
は iOS 10 で Foundation フレームワークに追加されたクラスであり、以下の機能を提供します。
- ISO 8601 形式の日付文字列から
Date
を生成 Date
から ISO 8601 形式の日付文字列を生成
ISO 8601
ISO 8601 は日付と時刻の表記に関する国際規格です。
以下の API などで ISO 8601 形式の日付文字列が使用されています。
ISO 8601 形式の日付文字列から Date
を生成
- ISO 8601 形式の日付文字列から
Date
を生成するにはdate(from:)
メソッドを使用します
「yyyy-MM-dd'T'HH:mm:ssZZZZZ」形式 (タイムゾーン指定あり) の場合
ISO8601DateFormatter
のデフォルトのフォーマット形式は「yyyy-MM-dd'T'HH:mm:ssZZZZZ」なので、ISO8601DateFormatter
オブジェクトを作成するだけで OK です。
let dateString = "2016-10-05T12:00:00+09:00" let formatter = ISO8601DateFormatter.init() // result!.description: 2016-10-05 03:00:00 +0000 let result = formatter.date(from: dateString)
「yyyy-MM-dd'T'HH:mm:ss」形式 (タイムゾーン指定なし) の場合
デフォルトのフォーマット形式以外の場合、formatOptions
プロパティを使用して、フォーマット形式を指定します。
let dateString = "2016-10-05T12:00:00" let formatter = ISO8601DateFormatter.init() // withFullDate: 年月日を指定 // withTime: 時刻を指定 (フォーマットは HH:mm:ss) // withDashSeparatorInDate: 日付の区切り文字に「-」を指定 // withColonSeparatorInTime: 時刻の区切り文字に「:」を指定 formatter.formatOptions = [.withFullDate, .withTime, .withDashSeparatorInDate, .withColonSeparatorInTime] // result!.description: 2016-10-05 12:00:00 +0000 let result = formatter.date(from: dateString)
Date
から ISO 8601 形式の日付文字列を生成
Date
から ISO 8601 形式の日付文字列を生成するには、以下のいずれかのメソッドを使用します。
string(from:)
string(from:timeZone:formatOptions:)
string(from:) メソッドを使用する
formatOptions
プロパティの設定は、「ISO 8601 形式の日付文字列から Date
を生成」する場合と同様です。
「yyyy-MM-dd'T'HH:mm:ssZZZZZ」形式 (タイムゾーン指定あり) の場合
let date = Date() let formatter = ISO8601DateFormatter.init() let result = formatter.string(from: date)
「yyyy-MM-dd'T'HH:mm:ss」形式 (タイムゾーン指定なし) の場合
let date = Date() let formatter = ISO8601DateFormatter.init() formatter.formatOptions = [.withFullDate, .withTime, .withDashSeparatorInDate, .withColonSeparatorInTime] let result = formatter.string(from: date)
string(from:timeZone:formatOptions:) メソッドを使用する
string(from:timeZone:formatOptions:)
メソッドを使用すれば、Date
, TimeZone
, ISO8601DateFormatter.Options
を指定して、日付文字列を生成することができます。
let date = Date() let result = ISO8601DateFormatter.string(from: date, timeZone: TimeZone.current, formatOptions: [.withInternetDateTime])
timeZone プロパティについて
ISO8601DateFormatter
には timeZone
プロパティが用意されているので、Date
から日付文字列を生成する時などにタイムゾーンを指定することができます。
let date = Date() let formatter = ISO8601DateFormatter.init() formatter.timeZone = TimeZone.current let result = formatter.string(from: date)
さいごに
本記事では iOS 10 で追加された ISO8601DateFormatter
クラスを使ってできることを紹介しました。これまで DateFormatter
を拡張して実現していたような処理を独自で書かなくてよくなったのはちょっと嬉しい改良ですね。