3
1

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.

iOS Simulator でタイムゾーンを変更して実行する方法

Posted at

タイムゾーンを越えたテストなど、iOS Simulator のタイムゾーンを変更したいときってありますよね?

さっとググると、MacOSのタイムゾーンを変更しろ!なんて情報がありますけど、MacOS の他のアプリケーションにも影響しそうで積極的にはやりたくありません。

別の方法はあるのでしょうか?

いろいろと調べたところ、結論からいうと、ビルド時の環境変数 TZ を変更することで、ビルドしたアプリ限定でタイムゾーンを変更できるようです。
正確には Simulator のタイムゾーンは変更されないのですが、僕が確認したかった範囲ではこれで十分だったので有用と思いましてまとめました。

手順

まずは、xcode 左上のアプリ名のところを選択して、「Edit Scheme...」を選びます。

image.png

次に、、下図のように選択します。

image.png

③ のところには、Name に TZ、Value にタイムゾーンを示す文字列を入力します。

Value の指定は、tz database にある Asia/Tokyo といった文字列や、JST, PST のような略語文字列でも扱ってくれるようです。タイムゾーン指定の標準については詳しくないのですが、tz database から選ぶのが無難と思います。

確認方法と注意点

まずは注意点。この方法だと、正確には 、実行しているアプリ内でのみタイムゾーンが変化し、iOS Simulator 内のタイムゾーンは変化しません。
なので、iOS 上部のステータスバーの時刻は変わりません。ですが、アプリ内の時刻は指定したタイムゾーンで処理されています。

確認した方法は次のとおりです。

まずは、なにも指定無し(= MacOS 側のシステム設定)です。システム設定は、Asia/Tokyo です。

適当なところに以下のコードをコピペします。

    let today = Date.today()
    let df = DateFormatter()
    df.dateFormat = "hh:mm Z"
    df.timeZone = TimeZone.current
    print(today)
    print(df.timeZone!)
    print(df.string(from: today))

実行すると、以下のようにコンソールに表示されます。日本時間で正しく表示されています。

2020-07-28 03:19:29 +0000
Asia/Tokyo (current)
12:19 +0900

次に、TZAmerica/Los_Angeles を設定して実行してみます。

2020-07-28 03:19:55 +0000
America/Los_Angeles (current)
08:19 -0700

適切にタイムゾーンが変更されていることを確認できました。

同様に、ちょっとマイナーな IRST(イラン標準時)を4文字略称で設定してみます。

2020-07-28 03:20:36 +0000
Asia/Tehran (current)
07:50 +0430

こちらも確認することができました。

参考文献

※ この記事は、xcode 11.4.1 で確認しています。

3
1
1

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
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?