Swift3でISO8601フォーマットの文字列をDate型に変換する


GithubのAPIやQiitaのAPIなどのレスポンスに含まれている日付はISO8601フォーマットになっています。
その形式をSwiftのDate型で扱うために、下記のようにDateextensionを実装していきます。

Date+ISO8601.swift
extension Date {
    private static let ISO8601Formatter: DateFormatter = {
        let dateFormatter = DateFormatter()
        dateFormatter.locale = Locale(identifier: "en_US_POSIX")
        dateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
        dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZ"
        return dateFormatter
    }()

    init?(fromISO8601 string: String) {
        guard let date = Date.ISO8601Formatter.date(from: string) else {
            return nil
        }
        self = date
    }
}

上記のextensionを利用することで、下記のように扱うことができるようになります。

let dateString = "2014-07-31T05:56:19Z"
let date = Date(fromISO8601: dateString) // Optional(2014-07-31 05:56:19 +0000)