都市 (ニューヨーク、ロンドンなど) のリストがあり、タイムゾーンを変換する必要がありますが、ほとんどの API ではタイムゾーン名 (東部標準時、東京標準時、等)。
都市名を適切な TimeZone 名に変換する方法はありますか? (ニューヨークを通過すると「東部標準時」に戻ります)
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 + "×tamp=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;
}
Creative CommonsAttribution3.0ライセンスの下で利用可能なフリータイムゾーンデータベースを使用できます。あなたはここでそれについての情報を見つけることができます:
SQLをそのまま使用することも、SQLデータベースをアプリケーションのいくつかのクラスに取り込むこともできます...
EarthTools.orgには、次のように緯度/経度でクエリできる無料のWebサービスがあります。
http://www.earthtools.org/timezone/<latitude>/<longitude>
ニューヨークの例:
http://www.earthtools.org/timezone-1.1/40.71417/-74.00639
しかし、いいえ、これを行う焼き付けクラスを私は知りません。
.net フレームワークで取得できる最も近いものは、TimeZonInfo.GetSystemTimeZones() です。
また、あなたのケースでは 1 対 1 のマッピングがないことに注意してください。たとえば、シドニー、オーストラリアに 1 つ、カナダにもう 1 つです。
C#TimeZoneInfo
を使用すると、これを行うことができます
TimeZoneInfo.GetSystemTimeZones()
.Where(k=>k.DisplayName.Substring(k.DisplayName.IndexOf(')')+2).ToLower().IndexOf("tokyo") >= 0)
.ToList()
説明:
表示名を使用して、タイムゾーンごとに都市を決定しました。たとえば、次の形式になります"(UTC+02:00) Beirut"
。次に、インデックス")"
+ 2を取得し、先頭のスペースを除いて次の文字列を取得して、クエリを実行します。
一致するタイムゾーンを都市別に返します。