ISO8601は、日時と時刻を表すための国際標準化で決まられています
早速使ってみよう!
ISO8601DateFormatter
extension Date {
    // Date -> 2018-09-18T11:00:00+0900のフォーマットに変更
    func convertToISO8601DateTime(timeZone: TimeZone = .current) -> String {
        let formatter = ISO8601DateFormatter()
        var option: ISO8601DateFormatter.Options = [.withFullDate, .withFullTime]
        option.remove([.withColonSeparatorInTimeZone])
        formatter.formatOptions = option
        formatter.timeZone = TimeZone(abbreviation: "JST")
        return formatter.string(from: self)
    }
}
ISO8601DateFormatterのOptionについて知る
ISO8601DateFormatterでは以下の4つのOptionが指定されています。
- .withInternetDateTime
- .withDashSeparatorInDate
- .withColonSeparatorInTime
- .withColonSeparatorInTimeZone
今回のコードでは、デフォルトを使わずに設定していきます。利用するOptionは、以下の3つになります。
| 利用or削除 | Option | 意味 | 
|---|---|---|
| 利用 | .withFullDate | 年月日を指定 | 
| 利用 | .withFullTime | 時刻を指定 | 
| 削除 | .withColonSeparatorInTimeZone | タイムゾーン(+0900)の: | 
.remove()を使っていらないOptionを排除
もしデフォルトでいらないOptionがある場合は、removeを使って削除しましょう!!
今回は、上記を利用してDate -> 2018-09-18T11:00:00+0900のフォーマットに変更しています。
年のみ利用や月のみ指定したい場合は、以下のサイトを参考にしてください。
ISO8601DateFormatter:iOS(Swift)で日付・時刻を ISO 8601 形式にして扱う
Apple developerサイト
タイムゾーン(時刻を自分の国にあった時間にする)
日本のサービスの場合は、日本の時間に合わせる必要があるため、「JST」を使います。
協定世界時を利用する場合は、「UTC」を利用します。
formatter.timeZone = TimeZone(abbreviation: "JST")
海外向けにアプリを開発する場合は、以下のURLよりタイムゾーンの略称を探してみてください。
タイムゾーンの略語一覧
