はじめに
現在、Zennの記事をウィジェットに一覧表示するアプリを作っています。
dateDecodingStrategy
を使用してデコードしたかったのですが、ZennのDateはミリ秒まで表示されており、標準のISO8601ではデコードできませんでした。
ミリ秒を含んだISO8601形式でもデコードできるようにカスタムのiso8601Formatterを作成しました。
実装
// MARK: DateFormatter
private static let iso8601Formatter: DateFormatter = {
let formatter = DateFormatter()
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ"
return formatter
}()
// MARK: JSONDecoder
private static let decoder: JSONDecoder = {
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
decoder.dateDecodingStrategy = .formatted(iso8601Formatter)
return decoder
}()
おわり
ISO8601DateFormatter
を使用するときはオプションがあり、簡単にミリ秒にも対応ができました。
しかし、JSONDecoder
ではISO8601DateFormatter
が使えないようです。