場所からタイムゾーン名に変換する次のコードがあります。
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;
}
したがって、「米国ニューヨーク」を通過すると、「東部標準時」が返されます。
次に、あるソースタイムゾーンから上記の他の取得されたタイムゾーンに時間を変換するこの2番目の関数があります。
var timeInDestTimeZone = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(sourceDate.Date, TimeZoneInfo.Local.Id, destination.TimeZoneName);
この例に出くわすまではうまく機能します。私が渡したとき:オーストラリアのメルボルン、私が戻ってきた最初の機能:オーストラリア東部夏時間
オーストラリア東部夏時間を(最後の引数として)2番目の関数に渡すと、次のエラーが返されます。
タイムゾーンID「オーストラリア東部夏時間」がローカルコンピューターで見つかりませんでした
私が間違っていることについて何か提案はありますか?2番目のグーグルマップAPI呼び出しからの応答を見ると、これらは私が返すすべてのフィールドです(例としてLAを使用):
{
"dstOffset" : 0.0,
"rawOffset" : -28800.0,
"status" : "OK",
"timeZoneId" : "America/Los_Angeles",
"timeZoneName" : "Pacific Standard Time"
}
メルボルンを通過すると、TimeZoneIdフィールドが "" Australia/Hobart""に設定されているのがわかります。これは、タイムゾーンの計算を検討するのに適切なフィールドです。または、他の「オフセット」フィールドを確認する必要がありますか?
任意の提案をいただければ幸いです。