😽

SwiftでのDate系のフォーマッターまとめ

2022/07/22に公開

フォーマッター 一覧

Formatter 扱う値
DateFormatter Dateを見やすいようにフォーマット 2022年7月21日 木曜日 13:58
DateComponentsFormatter 時間の量(所要時間) 3年4か月16日
RelativeDateTimeFormatter 今からの相対時間を表示 4 日前, 明日, 一昨日, 3 年後
DateIntervalFormatter 期間の表示 2019/03/06 0:55~2022/07/22 0:55
ISO8601DateFormatter ISO 8601に準したフォーマット 2022-07-21T15:55:40Z

DateComponentsFormatterの使い所

時間の量(所要時間)に向いているフォーマッター

  • 乗り換え時間(2分)
  • 作業予定時間(3時間15分)
  • ゲームクリア時間(5時間46分)

RelativeDateTimeFormatterの使い所

今からの相対時間を表示に向いているフォーマッター

  • Twitterの投稿時間(3分前)
  • ゲーム開始時間(2時間前)
  • タスクの開始時間(1日後)

それぞれの使い方

let now = Date.now
let future = Calendar.current.date(byAdding: .hour, value: 12, to: now)!
let past = Calendar.current.date(byAdding: .hour, value: -12, to: now)!

let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .full
dateFormatter.timeStyle = .short
print(dateFormatter.string(from: past)) // 2022/07/21 13:54:18

let dateComponentsFormatter = DateComponentsFormatter()
dateComponentsFormatter.allowedUnits = [.year, .month, .day, .hour, .minute]
dateComponentsFormatter.unitsStyle = .brief
dateComponentsFormatter.maximumUnitCount = 3

print(dateComponentsFormatter.string(from: .init(second: 33122))!) // 9時間12分
print(dateComponentsFormatter.string(from: past, to: now)!) // 12時間

let relativeDateTimeFormatter = RelativeDateTimeFormatter()

print(relativeDateTimeFormatter.string(for: past)!) // 12時間前
print(relativeDateTimeFormatter.string(for: future)!) // 11時間後

let dateIntervalFormatter = DateIntervalFormatter()
print(dateIntervalFormatter.string(from: past, to: now)) // 2022/07/21 13:54~2022/07/22 1:54

let iso8601DateFormatter = ISO8601DateFormatter()
print(iso8601DateFormatter.string(from: now)) // 2022-07-21T16:54:18Z

Discussion