基本的には「iOSでISO8601を扱う」の記事で書いてあるように、ISO8601DateFormatter
を使って実装すれば問題ない。
iso8601DateFormatter.swift
let formatter = ISO8601DateFormatter()
let date = formatter.date(from: "2018-02-14T00:51:31+09:00")
ただし、たまに
2017-12-27T03:00:35.000Z
のように末尾に Z
がつくものがある。
Zって何?
Zulu timeの略で、UTCと同義らしい。
https://ejje.weblio.jp/content/Zulu+time
このような末尾がZの時(Zulu time)は、 formatOptions
というオプションセットのプロパティがあるので、 [.withInternetDateTime, .withFractionalSeconds]
の2つを渡すことでString→Date変換できる。
実装の仕方はこのスタックオーバーフローの記事を参考に。
テストケース
zuluToDate.swift
func testDateFromString() {
let formatter = ISO8601DateFormatter()
formatter.formatOptions = [.withInternetDateTime, .withFractionalSeconds]
let dateString = "2017-12-27T03:00:35.000Z"
let date = formatter.date(from: dateString)
XCTAssertNotNil(date)
}