0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Swiftの日時(Date)をISO8601を使って国際標準化にしてみよう。

Posted at

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

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?