3

都市 (ニューヨーク、ロンドンなど) のリストがあり、タイムゾーンを変換する必要がありますが、ほとんどの API ではタイムゾーン名 (東部標準時、東京標準時、等)。

都市名を適切な TimeZone 名に変換する方法はありますか? (ニューヨークを通過すると「東部標準時」に戻ります)

4

5 に答える 5

6

C# に組み込まれているようなものは認識していませんが、そのために Google Maps API を使用できます。

1) 都市の経度/緯度を取得: http://maps.googleapis.com/maps/api/geocode/json?address=New%20York,%20CA&sensor=false

2) タイムゾーンを取得するために long/lat を使用します。

コード例:

   public TimeZoneResponse ConvertCityToTimeZoneName(string location)
   {
       TimeZoneResponse response = new TimeZoneResponse();
       var plusName = location.Replace(" ", "+");
       var address = "http://maps.google.com/maps/api/geocode/json?address=" + plusName + "&sensor=false";
       var result = new System.Net.WebClient().DownloadString(address);
       var latLongResult = JsonConvert.DeserializeObject<GoogleGeoCodeResponse>(result);

       if (latLongResult.status == "OK")
       {
           var timeZoneRespontimeZoneRequest = "https://maps.googleapis.com/maps/api/timezone/json?location=" + latLongResult.results[0].geometry.location.lat + "," + latLongResult.results[0].geometry.location.lng + "&timestamp=1362209227&sensor=false";
           var timeZoneResponseString = new System.Net.WebClient().DownloadString(timeZoneRespontimeZoneRequest);
           var timeZoneResult = JsonConvert.DeserializeObject<TimeZoneResult>(timeZoneResponseString);

           if (timeZoneResult.status == "OK")
           {

               response.TimeZoneName = timeZoneResult.timeZoneName;
               response.Success = true;
               return response;
           }
       }
       return response;
   }
于 2013-03-02T06:28:06.873 に答える
2

Creative CommonsAttribution3.0ライセンスの下で利用可能なフリータイムゾーンデータベースを使用できます。あなたはここでそれについての情報を見つけることができます:

http://timezonedb.com/

SQLをそのまま使用することも、SQLデータベースをアプリケーションのいくつかのクラスに取り込むこともできます...

于 2013-03-02T06:22:10.930 に答える
2

EarthTools.orgには、次のように緯度/経度でクエリできる無料のWebサービスがあります。

http://www.earthtools.org/timezone/<latitude>/<longitude>

ニューヨークの例:

http://www.earthtools.org/timezone-1.1/40.71417/-74.00639

しかし、いいえ、これを行う焼き付けクラスを私は知りません。

于 2013-03-02T06:22:18.320 に答える
0

.net フレームワークで取得できる最も近いものは、TimeZonInfo.GetSystemTimeZones() です。

また、あなたのケースでは 1 対 1 のマッピングがないことに注意してください。たとえば、シドニー、オーストラリアに 1 つ、カナダにもう 1 つです。

于 2013-03-02T06:36:11.527 に答える
0

C#TimeZoneInfoを使用すると、これを行うことができます

TimeZoneInfo.GetSystemTimeZones()
            .Where(k=>k.DisplayName.Substring(k.DisplayName.IndexOf(')')+2).ToLower().IndexOf("tokyo") >= 0)
            .ToList()

説明:

表示名を使用して、タイムゾーンごとに都市を決定しました。たとえば、次の形式になります"(UTC+02:00) Beirut"。次に、インデックス")"+ 2を取得し、先頭のスペースを除いて次の文字列を取得して、クエリを実行します。

一致するタイムゾーンを都市別に返します。

于 2019-06-08T17:01:45.163 に答える