web-dev-qa-db-ja.com

都市のタイムゾーンへのマッピングリストが必要です-それを取得する最良の方法は?

都市、州/県、および国のリストがあり、それぞれのタイムゾーンを簡単に見つける必要があります。具体的には、どのWindows TimeZoneがマップされているかを知る必要があります。これまでのところ、これは難しいプロセスでした。都市を何かに渡し、タイムゾーンを戻す簡単な方法がないためです(タイムゾーンはオフセットであり、タイムゾーンが夏時間をサポートしているかどうか)。

現在のフローは http://www.batchgeocode.com を使用して都市の緯度/経度を取得し(実際にはYahooサービスを呼び出します)、次に http:// www.EarthTools.org は、オフセットにマッピングされるタイムゾーン文字を取得します。問題は、yahooサービスが間違った経度/緯度を返すことがあり、earthtools.orgがDST情報について多くを知らないため、正しいTimeZone Idへのマッピングは退屈な手動プロセスです。

私はこれを行った最初の人になることはできません-誰かがより良い方法を知っていますか、または必要な情報を持っているリストがありますか?

ありがとう。

52
mhamrah

興味深い質問です!これらの他の3つのSO投稿( 4150455901 および 23702 )は、いくつかのリードに言及しています。 Olsonデータベース (詳細については Wikipediaのエントリ を参照)、しかし、よりアルゴリズム的/プログラム的に見えます(たとえば、郡名を知っている場合、特定の郡の規則があります) インディアナ )。

私はEarthToolsを見てみましたが、それは 失敗St.Pierre/Miquelon 、良いテストケースの1つです(-3:00ではなく、近くのニューファンドランドの-3:30 EarthToolsの言うとおりです)。

有望なオプション: worldtimeengine.com には無料のインタラクティブバージョンと安価なAPI(英国ポンドあたり5000クエリ)がありますが、APIは入力としてlat、longクエリのみを対象とします(場所としてではありません)入力、これはインタラクティブバージョンにあります)。

ベストリード:geonames.org をご覧ください。使用できる素敵なリッチAPIがありますが、また、無料(低速)バージョンと、パフォーマンス向上のための商用バージョンの両方があります。

追伸ここにいくつかの良いテストケースがあります( worldtimezone.com および Wikipediaのタイムゾーンのリスト から、 タイムゾーンのマップ も例証です):

  • カラカス、ベネズエラ(-4:30)
  • ニューファンドランド州ガンダー(-3:30)
  • イランテヘラン(+3:30)
  • アフガニスタンのカブール(+4:30)
  • ネパール、カトマンズ(+5:45)
  • ヤンゴン、ミャンマー(+6:30)
  • ニュージーランド、チャタム諸島(+12:45)
  • イースター島(-6)
  • サンピエール・ミクロン(-3)
  • スタンランド、フォークランド諸島(-4)
  • インディアナ州エバンズビル(-6 =中央)
  • オレゴン州オンタリオ(-7 =山)
37
Jason S

moment-timezone は、タイムゾーン計算用のJavaScriptライブラリです。

国、タイムゾーム、オフセットをリンクするすべてのタイムゾーンデータはすべて json形式で利用可能 です。

2
Tim

。NET C#MVCを使用し、Windows Timezoneのリストが必要でした各国向け。

すべての登録ユーザーについて、タイムゾーンを自動的に設定できます。

ほとんどのオンラインデータベースは[〜#〜] iana [〜#〜]タイムゾーンを提供し、特定の国にマッピングすることは困難です。

NodaTime を使用して、次のエントリをリストするJsonを作成しました。

CountryName
2LetterIsoCountryCode
3LetterIsoCountryCode
IANATimezones
WindowsTimezones

生成された JSON here をダウンロードできます。

1

現在のワークフローの2番目の部分を支援できます。 lat/longをタイムゾーンにマップするJavaライブラリを作成しました。データベースはソースコードでエンコードされています。

ソースコードは基本的にif文の巨大なツリーです:if(lat> = -33.0)if(lng <-151.5)... else ...など。それはただ一つのクラスです。したがって、C#を使用する場合、移植するのは簡単です。

http://www.edval.biz/mapping-lat-lng-s-to-timezones

22kmの精度です。

0
Tim Cooper