*前回の記事ではDateFormatterを使った日付の出力について説明しました。
日時の範囲を表示する
例えば「2018年5月10日〜5月20日」「午前10時〜午前11時」のように日付や時刻の範囲を表示する場合には、DateIntervalFormatter
を使います。
let date1 = Date()
let date2 = date1.addingTimeInterval(3600*24)
let formatter = DateIntervalFormatter()
formatter.dateStyle = .medium
formatter.timeStyle = .short
print(formatter.string(from: date1, to: date2))
// 出力:Jun 24, 2018, 8:20 PM – Jun 25, 2018, 8:20 PM(英語の場合)
// 出力:2018/06/24 20:20~2018/06/25 20:20(日本語の場合)
dateTemplate
を使うとより細かく日付や時刻を指定できます。
let date1 = Date()
let date2 = Calendar.current.move(date1, byDays:30)
let formatter = DateIntervalFormatter()
formatter.dateTemplate = "yMMMd"
print(formatter.string(from: date1, to: date2))
// Jun 24 – Jul 24, 2018
// 2018年6月24日~7月24日
上記のように日付のみの範囲を表示する場合、同じ年であれば2018年は1度しか表示されない、など気の利いた表示をしてくれます。またシステム設定で和暦を指定している場合は、「2018年」の代わりに「平成30年」と表示されます。
また以下のように月が同じ場合は6月が1度しか表示されず、短くて分かりやすい表示になっています。
let date1 = Date()
let date2 = Calendar.current.move(date1, byDays:3)
let formatter = DateIntervalFormatter()
formatter.dateTemplate = "yMMMd"
print(formatter.string(from: date1, to: date2))
// Jun 24 – 27, 2018
// 2018年6月24日~27日
以下のようにして時刻のみの出力も可能です。
let date1 = Date()
let date2 = date1.addingTimeInterval(3600)
let formatter = DateIntervalFormatter()
formatter.dateTemplate = "jm"
print(formatter.string(from: date1, to: date2))
// 8:20 PM – 9:20 PM(英語)
// 20:20~21:20(日本語)
システム設定で12時間表示を指定している場合は、「午後8時20分~午後9時20分」と表示されます。