5
2

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 5 years have passed since last update.

【Swift】DateIntervalFormatterで日付や時刻の範囲を出力する

Posted at

前回の記事では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分」と表示されます。

5
2
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
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?