web-dev-qa-db-ja.com

iPhoneからタイムゾーン/国を取得する

とにかく、電話がどのタイムゾーン/国にあるかを知るためにありますか?位置情報サービスを使用したくない。

これの目的は、コールを自動的にルーティングすることです。ユーザーが米国にいる場合は、米国ベースのコールセンターを呼び出すようにデフォルトでアプリを設定します。ユーザーが別の国にいる場合は、デフォルトでコールセンターになります。

ありがとう!

24
Alan

次を使用してローカルタイムゾーンの名前を取得できます。

NSTimeZone *timeZone = [NSTimeZone localTimeZone];
NSString *tzName = [timeZone name];

名前はAustralia/Sydney、またはEurope/Zurich、またはAmerica/Denverのような名前になります。あなたは大陸だけを気にするかもしれないように聞こえるので、それがあなたが必要とするすべてかもしれません。

さらに必要な場合: http://www.iana.org/time-zones で公式タイムゾーンデータベースを取得します。 tzdata2013g.tar.gz(またはこれを読んでいるときにtzdataYYYYx.tar.gzの最新バージョンが何であれ)をダウンロードします。そのアーカイブにはzone.tabという名前のファイルがあり、各タイムゾーンの緯度/経度を示します。次に例を示します。

CH      +4723+00832     Europe/Zurich

+4723+00832は、緯度= +47º23 "、経度= +8º23"を示します。

Update:場合によっては(どちらかわからない)、タイムゾーン名はUS/Pacificのような古いスタイルの名前かもしれませんzone.tabにリストされていません。これらを処理するには、backwardというファイルも取得します。これは、古い名前から現在の名前への翻訳を提供します。

zone.tabをアプリで使用できるものに変換するかどうかはユーザー次第です。結果は位置情報サービスほど正確ではありませんが、一般的なアイデアを提供します。しかし、それは保証されていません。いくつかの状況で失敗します。

  1. ユーザーは設定でタイムゾーンを変更します。ほとんどのユーザーは自分の電話で時間とゾーンを自動的に設定できますが、全員ではありません。ユーザーがタイムゾーンを変更すると、正確なものではなく、ユーザーが望むものを取得できます。

  2. デバイスは正しいローカルタイムゾーンを特定できません。ネットワークの問題により、電話機が時刻とゾーンを正確に設定できない場合があります。たとえば、ユーザーが飛行機で旅行し、着陸時にネットワークに問題がある場合、電話は出発地からのタイムゾーンを表示する場合があります。

60
Tom Harrington

更新:最後のコメントの後、回答を変更しています。

電話機のIPの逆ルックアップを使用して、位置情報を見つけることができます。 利用可能な複数のREST API があります。

これはAppleがアプリケーションを拒否する可能性があります。安全な賭けはAppleが提供する ロケーションサービス

1
Pradeep Mahdevu
    NSTimeZone *timeZoneLocal = [NSTimeZone localTimeZone];
    NSString *strTimeZoneName = [timeZoneLocal name];

    or

    NSTimeZone *timeZoneLocal = [NSTimeZone defaultTimeZone];
    NSString *strTimeZoneName = [timeZoneLocal name];
1