1

ユーザーの緯度/経度を取得するために http://ipinfodb.com/ apiを使用しています...ユーザーのタイムゾーンを配列の形式で持っています。配列は次の情報を返します...

array(11) { 
     ["statusCode"]=> string(2) "OK"... 
     ["countryCode"]=> string(2) "CA" 
     ["countryName"]=> string(6) "CANADA" 
     ["regionName"]=> string(16) "BRITISH COLUMBIA" 
     ["cityName"]=> string(8) "VANCOUVER" ....
     ["timeZone"]=> string(6) "-07:00" 
}

配列からの情報を使用して、タイムゾーンが-07:00、04:00などの形式になっている場合、ユーザーの現在の時刻をどのように見つけることができますか?

4

1 に答える 1

4

「タイムゾーン」はオフセットではありません! 非常に多くの API がこのよくある間違いを犯していることに私は悩まされています。戻りフィールドが「timeZone」と呼ばれるという事実に惑わされないでください。

「タイム ゾーン」は、1 年を通して 1 つ以上のオフセットを持つことができる地域です。タイムゾーンと日付からオフセットを解決することはできますが、逆方向に進むことはできません! TZDB タイム ゾーンの一覧はこちらです。

特定のタイム ゾーンはAmerica/Vancouver、あなたの緯度/経度がバンクーバー市と一致したからではなく、バンクーバーがたまたまあなたの場所のタイム ゾーンの参照都市であるためです。すべての都市に独自のタイム ゾーン ID があるわけではないため、推測することはできません。

-07:00 は、タイム ゾーンの現在のオフセットです。America/Vancouverそれはたまたま夏時間のオフセットです。サマータイムが終わると に変わり-08:00ます。あなたが使用している特定の Web サービスは、この情報を明らかにしていないようです。

StackOverflow には、緯度/経度から実際のタイム ゾーンを解決する方法について既に回答している質問が他にもいくつかあります。呼び出すことができる Web サービスや、独自のデータベースを使用することができます。ここにいくつかのリンクがあります:

もっとあると思います。これを重複としてクローズしたくなりましたが、以前に参照された ipinfodb.com を見たことがありませんでした。

API が現在のオフセットを返すことが確実であり、ユーザーの現在の時刻だけが必要な場合は、Jonathon が質問のコメントで指摘したように、オフセットを現在の UTC 時刻に適用するだけで、時刻がわかります。その場所にあります。しかし、これを毎回行う必要があります。そのオフセットを保存して、後で再度使用することはできません。そのためには、完全なタイム ゾーン参照が必要です。

于 2013-04-17T21:25:39.893 に答える