##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よりタイムゾーンの略称を探してみてください。
タイムゾーンの略語一覧