【Swift】Dateの使い方

(2022/05/19 更新)

Dateはカレンダーやタイムゾーンに依存しない「特定の時点」を示す構造体です。

単体で日時の比較や、時間間隔の計算等が可能ですが、夏時間、閏年、うるう秒、暦法(ユリウス暦やグレゴレオ歴等)等は考慮されませんので、正確に算出する為にはCalendar構造体と組み合わせて使用します。

スポンサーリンク

環境

この記事の情報は次のバージョンで動作確認しています。

【Xcode】13.3
【Swift】5.6
【iOS】15.4
【macOS】Monterey バージョン 12.3
スポンサーリンク

現在日時の取得

引数無しのイニシャライザで現在の日時を取得できます。

print出力した結果はGMT(グリニッジ標準時)表記の為、日本時間から9時間ずれていますが、全く同じ「特定の時点」を示しています。

スポンサーリンク

特定の日時を生成

Calendar構造体とDateComponents構造体を組み合わせて特定の日時を生成します。

使用するカレンダーが変わると、設定した日時の意味合いが変わるので注意が必要です。
例えば、西暦(.gregorian)の代わりに、和暦(.japanese)を使用すると、令和2020年と解釈され、出力結果は、

となります。

スポンサーリンク

日時を秒単位で進める/戻す

引数に秒数を指定して、n秒後の日時を生成します。
マイナス値を指定すると、n秒前の日時が生成されます。
あくまで絶対値を調整するだけですので、時間、日、月などの暦の概念を考慮する場合は、Calendarを使用する必要があります。

こちらは自らが保持する日時情報にインターバルを追加するメソッドです。
自身を更新する為、変数(var)として宣言されていなければいけません。

使用例

簡略系

演算子(+,-)および代入演算子(+=,-=)を使用した、加減算も可能です。
こちらの方がコードがすっきりしますね。

スポンサーリンク

時間差を取得する

引数で指定した他の日時との時間差を秒数で取得します。
戻り値のTimeIntervalはDouble型です。
比較対象が過去の場合はマイナス値が戻ります。

使用例

スポンサーリンク

日時の比較

Dateの比較には比較演算子が使えます。

出力結果

スポンサーリンク

Dateから日時の各要素を取得する

Date型から年、月、時刻、曜日などの各要素を取得するにはCalendar構造体のcomponentメソッドを使用します。

【引数】
component
取得する要素をCalendar.Component(列挙型)で指定します。
指定可能な値は次の通りです。

識別子 意味
.year
.month
.day
.hour 時間
.minute
.second
.nanosecond ナノ秒
(1秒=1,000,000,000ナノ秒)
.weekOfYear 今年に入って何週目かを表す値
.weekOfMonth 今月に入って何週目かを表す値
.weekday 曜日を示す識別子
1〜N、gregorianではN=7、1=日曜日
.weekdayOrdinal 今月に入って何回目の該当曜日かを表す値
(「第n火曜日」のnの部分)
.era 時代を示す値
使用するカレンダーが西暦(gregorian)の場合は、紀元前(0)または紀元後(1)のどちらか、和暦(japanese)の場合は元号を示す値(大化=0、昭和=234、令和=236、等)を示す。

from
対象の日時(Date型)を指定します。

【戻り値】
取得した要素(Int型)を返します。

使用例

スポンサーリンク

あわせて読みたい記事

【Swift】日付と時間を扱うクラス/構造体まとめ
Swiftでは日付と時間を扱う為にクラスや構造体がいくつか用意されており、組み合わせて使用します。 本記事ではそれらのクラス/構造体を紹介します。
【Swift】Calendarの使い方
Calenderは主に日付と時間の計算を行う際に使用する構造体です。
【Swift】TimeZoneの使い方
TimeZoneはタイムゾーン(標準時間帯)情報を保持する構造体です。 タイムゾーンはある地域での標準時間を表す指標で、GMT(グリニッジ標準時)との時差で表します。 日本の標準時間である日本標準時(JST)はGMT+9時間で定義されていま...
【Swift】Localeの使い方
Localeは、言語と地域を組み合わせたロケール情報を保持する構造体です。 日付や時間、金額、数値等の書式の決定に影響します。
【Swift】DateFormatterの使い方
日付と時間の書式を定義するクラスです。 Date構造体←→テキストの相互変換に使います。