我有以下代碼從位置轉換爲TimeZone名稱。爲什麼我得到這個時區錯誤,是否有更好的方法來映射谷歌地圖時區和Windows時區?
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;
}
所以,當我通過在「紐約,美國」,則返回「東部標準時間」
我再有一次從一個源時區轉換第二個功能到上面的其他檢索時區。
var timeInDestTimeZone = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(sourceDate.Date, TimeZoneInfo.Local.Id, destination.TimeZoneName);
它的工作很好,直到我遇到這個例子。當我通過:澳大利亞墨爾本第一個函數,我回去:澳大利亞東部夏令時
當我通過澳大利亞東部夏令時進入我的第二個功能(作爲最後一個參數),我得到這個錯誤回:
時區ID「澳大利亞東部夏令時」未在本地計算機
什麼我做錯任何建議上發現了什麼?當我看到從第二個谷歌地圖API的響應調用這些都是我回來(使用LA爲例)的字段:
{
"dstOffset" : 0.0,
"rawOffset" : -28800.0,
"status" : "OK",
"timeZoneId" : "America/Los_Angeles",
"timeZoneName" : "Pacific Standard Time"
}
當我通過在墨爾本,我看到了TimeZoneId字段設置到:「」澳大利亞/霍巴特「」。這是正確的領域來看待時區計算。或者我應該看看其他的「偏移」字段?
任何建議將不勝感激。
你有徽章幾乎喬恩斯基特... :) – gdoron 2013-03-03 18:48:41
這可現在用Noda Time 1.1.0完成。 [我在這裏發佈了轉換函數。](http://stackoverflow.com/q/17348807/634824) – 2013-06-27 17:29:49