Mam następujący kod Konwertuj z lokalizacji na nazwę strefy czasowej.Dlaczego pojawia się ten błąd strefy czasowej i czy istnieje lepszy sposób mapowania między strefą czasową Map Google a strefami czasowymi w systemie 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;
}
Więc kiedy przechodzą w "New York, Stany Zjednoczone", zwraca "Eastern Standard Time"
I wtedy ten drugi funkcje, które konwertuje czas z jednej strefy czasowej źródłowym do tej innej znalezionej strefy czasowej powyżej.
var timeInDestTimeZone = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(sourceDate.Date, TimeZoneInfo.Local.Id, destination.TimeZoneName);
Działa dobrze, dopóki nie wpadłem na ten przykład. Kiedy mijam w: Melbourne, Australia w pierwszej funkcji wrócę: australijski Eastern Daylight Time
kiedy mijam australijskiego Eastern Daylight Time w moją drugą funkcję (jako ostatecznego argumentu), otrzymuję ten błąd tył:
strefa czasowa Identyfikator „Australijskie Eastern Daylight time” nie została znaleziona na komputerze lokalnym
Wszelkie sugestie na temat tego, co robię źle? Kiedy patrzę na odpowiedzi od sekundy Google Maps API nazywają to wszystko z pól że wrócę (używając LA jako przykład):
{
"dstOffset" : 0.0,
"rawOffset" : -28800.0,
"status" : "OK",
"timeZoneId" : "America/Los_Angeles",
"timeZoneName" : "Pacific Standard Time"
}
kiedy mijam w Melbourne, widzę pole TimeZoneId jest ustawiony do: "" Australia/Hobart "". Czy to odpowiednie pole do obliczenia strefy czasowej. A może powinienem patrzeć na inne pola "offsetowe"?
Wszelkie sugestie będą mile widziane.
Musisz odznaczenia prawie jak Jon Skeet ... :) – gdoron
To może być zrobić teraz z Noda Time 1.1.0. [Opublikowałem tutaj funkcje konwersji.] (Http://stackoverflow.com/q/17348807/634824) –