Mam problemy wyświetlające poprawną datę w przeglądarce klienta przy użyciu serializowanego obiektu JSON. Użytkownik może zdefiniować strefę czasową, w której chce wyświetlać dane. Biorąc to pod uwagę, konwertuję datę UTC na strefę czasową użytkownika na serwerze. Następnie chcę serializować datę/czas (które są już konwertowane na ich określoną strefę czasową) do przeglądarki przez JSON.Serializacja daty JSON i strefy czasowe
Wydaje się to proste, jednak serializatory JSON, z których korzystałem, bardzo źle podsumowywały moje daty. Serwer znajduje się w systemie UTC, a klient jest w trybie centralnym (-6). Terminy są dostosowywane (-12 godzin), mimo że określam DateTime.Kind to Unspecified.
W jakiś sposób .NET wie, w jakiej strefie czasowej znajduje się przeglądarka klienta oraz w jakiej strefie czasowej znajduje się serwer i neguje -6 od moich dat/czasów, mimo że już skorygowałem czas według ustawień globalnych użytkownika i ustawić rodzaj dat, które będą nieokreślone. Jak mogę uzyskać serializatory JSON, aby NIE próbować dopasowywać dat?
List<ErrorGridModel> models = Mapper.Map<ErrorCollection, List<ErrorGridModel>>(errors);
foreach (ErrorGridModel m in models)
{
//convert UTC dates to user local dateTime - split out date vs. time for grouping & splitting columns
DateTime dtLocal = TimeZoneInfo.ConvertTimeFromUtc(m.ErrorDate, this.AppContext.User.TimeZoneInfo);
m.ErrorDate = new DateTime(dtLocal.Year, dtLocal.Month, dtLocal.Day, 0, 0, 0, DateTimeKind.Unspecified);
m.ErrorTime = new DateTime(1900, 1, 1, dtLocal.Hour, dtLocal.Minute, dtLocal.Second, DateTimeKind.Unspecified);
}
IQueryable<ErrorGridModel> dataSource = models.AsQueryable();
return new ContentResult() { Content = JsonConvert.SerializeObject(dataSource.ToDataSourceResult(request), new JsonSerializerSettings() { DateFormatHandling = DateFormatHandling.MicrosoftDateFormat }), ContentType = "application/json" };
//return Json(dataSource.ToDataSourceResult(request));
daty ISO wydaje się działać, ale nie mogę ich używać jak mam 3rd kontrole firm, które chcą starszego formatu Microsoft ... który dostosowuje strefy czasowe na mnie.
To nie jest odpowiedź na Twój problem, ale jeśli chcesz przesunąć datę logikę do JavaScript - sprawdź moment.js http://momentjs.com/ –