我有以下代码从位置转换为时区名称。
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 字段设置为:""Australia/Hobart""。这是要查看时区计算的正确字段吗?还是我应该查看其他“偏移”字段?
任何建议将不胜感激。