【Swift】TimeZoneの使い方

TimeZoneはタイムゾーン(標準時間帯)情報を保持する構造体です。
タイムゾーンはある地域での標準時間を表す指標で、GMT(グリニッジ標準時)との時差で表します。
日本の標準時間である日本標準時(JST)はGMT+9時間で定義されています。

スポンサーリンク

環境

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

【Xcode】11.4
【Swift】5.2
【iOS】13.4
【macOS】Catalina バージョン 10.15.4

現在のタイムゾーン情報の取得

iOSでは使用している端末の位置情報により自動的にタイムゾーンが設定されますので、通常は特に意識する必要はありません。
Swiftで現在のタイムゾーン情報を取得するには次のようにします。

タイムゾーン識別子の取得

タイムゾーン識別子とはタイムゾーンを識別する為の地政学的地域識別子です。
String型で"地域名/都市名"の書式で表されます。
日本時間のタイムゾーン識別子は”Asia/Tokyo”です。

特定日の時差を取得する

現時点の時差を秒数で取得するには次のようにします。

引数に特定日付を指定すると該当日の時差が取得できます。
サマータイムを採用している地域では、日付によって時差が変わる為、このような仕組みがあります。
日本も過去にサマータイムが実施されていた時期があり、その時の日付で確認すると時差が通常とは異なります。

TimeZone構造体の生成

以下に示す方法で、特定のタイムゾーンを示すTimeZone構造体が生成可能です。
これらのTimeZone構造体は、あくまでプログラム上の日時処理での使用を目的としており、使用している端末のタイムゾーンは変更できません。

タイムゾーン識別子での生成

イニシャライザでタイムゾーン識別子を指定して、特定のTimeZone構造体を生成できます。

指定可能なタイムゾーン識別子は、次の方法で取得可能です。

タイムゾーン識別子(略称)での生成

一部のタイムゾーン識別子は正式名称の代わりに略称の指定が可能です。

使用可能な略称一覧は、次の方法で取得可能です。

時差を秒数で指定して生成

GMT(グリニッジ標準時)からの時差を秒数で指定して生成します。
この方式で生成したTimeZone構造体は、前途の2つの生成方法と異なり、その地域のサマータイムが考慮されませんので注意が必要です。

iOS端末でのタイムゾーン設定

iOSでは使用している端末の位置情報により自動的にタイムゾーンが設定されるので、通常は特に意識する必要はありません。

タイムゾーンの確認方法

[設定]→[一般]→[日付と時刻] で現在設定されているタイムゾーンが確認できます。
[時間帯]に表示されている地域のタイムゾーンが現在設定されています。

タイムゾーンの確認方法

タイムゾーンの手動設定

先の画面で[自動設定]をオフにすると、時間帯が変更可能になります。
時間帯選択画面で検索窓に国名や都市名を入力すると、該当するタイムゾーンの一覧が表示されますので、そこから選択します。

タイムゾーンの手動設定

あわせて読みたい記事

【Swift】日付と時間を扱うクラス/構造体まとめ
Swiftでは日付と時間を扱う為にクラスや構造体がいくつか用意されており、組み合わせて使用します。本記事ではそれらのクラス/構造体を紹介します。
【Swift】Dateの使い方
Dateはカレンダーやタイムゾーンに依存しない「特定の時点」を示す構造体です。単体で日時の比較や、時間間隔の計算等が可能ですが、夏時間、閏年、うるう秒、暦法(ユリウス暦やグレゴレオ歴等)等は考慮されませんので、正確に算出する為にはCal...
【Swift】Calendarの使い方
Calenderは主に日付と時間の計算を行う際に使用する構造体です。
【Swift】Localeの使い方
Localeは、言語と地域を組み合わせたロケール情報を保持する構造体です。日付や時間、金額、数値等の書式の決定に影響します。
【Swift】DateFormatterの使い方
日付と時間の書式を定義するクラスです。Date構造体←→テキストの相互変換に使います。