Używam asp.net [WebMethod] do wypychania obiektu .net z powrotem do wywołania Ajax w przeglądarce. Jedną z właściwości obiektu jest typ DateTime.
Po dostarczeniu do przeglądarki, czas wynosi siedem godzin przed godziną przechowywaną na serwerze SQL.
OK, więc moja przeglądarka jest w Peru (GMT-5), a serwer jest w Niemczech (obecnie GMT + 2), stąd 7 godzin.. .net serializator JSON zwraca czas lokalnego klienta do przeglądarki?
jako poprawka wyślę przesunięcie UTC na kliencie z żądaniem Ajax
d = new Date();
d.getTimezoneOffset();
następnie na serwerze I dowiedzieć się przesunięcie tam:
// get a local time zone info
TimeZoneInfo tz = TimeZoneInfo.Local;
// get it in hours
int offset = tz.BaseUtcOffset.Hours;
// add one hour if we are in daylight savings
if (tz.IsDaylightSavingTime(DateTime.Now))
{
offset++;
}
Teraz mogę ustalić czas pole w moim obiekcie, zanim zostanie wysłane do przeglądarki.
Moje prawdziwe pytanie brzmi: w jaki sposób serialser wie o 7 godzinach?
Żądanie http nie zawiera żadnych informacji o czasie.
Czy za dużo pytam, czy chcę dokładny czas przechowywany w bazie danych?
Aktualizacja:
Oto przykład, data w bazie danych: 2009-Oct-15 22:00
Nie ma strefy czasowej przywiązany do tego.
Kiedy zadzwonić do WebMethod na moim komputerze dev, gdzie klient i serwer są oczywiście w tej samej strefie czasowej, JSON z serwera jest:
{"d":{"TheDate":"\/Date(1255662000000)\/"}}
JSON ze zdalnego serwera w Niemczech:
{"d":{"TheDate":"\/Date(1255636800000)\/"}}
jest to różnica w ciągu 7 godzin w JSON jak widać na Firebug'a. W tym punkcie nie ma jeszcze JavaScript.
Jedną z moich pomysłów było to, że asp.net dołącza strefę czasową do sesji, ale wydaje się, że tak nie jest.
to będzie pracować dla Ciebie http://www.codeproject.com/KB/aspnet/Seria_Deseria_ASP_NET.aspx –