Edited at

【Swift】ISO8601形式でString→Date変換とZulu time

基本的には「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)
}