JSON シリアル化オブジェクトを使用して、クライアントのブラウザーに正しい日付を表示する際に問題が発生しています。ユーザーは、データを表示するタイム ゾーンを定義できます。これを考慮して、UTC 日付をサーバー上のユーザーのタイム ゾーンに変換します。次に、日付/時刻 (定義済みのタイム ゾーンに既に変換されています) を JSON 経由でブラウザーにシリアル化したいと思います。
単純なように思えますが、私が使用してきた JSON シリアライザーは私の日付をひどく混乱させてきました。サーバーは UTC で、クライアントは中央 (-6) です。DateTime.Kind を Unspecified に指定しているにもかかわらず、日付が調整されています (-12 時間)。
どういうわけか、.NET はクライアントのブラウザーのタイム ゾーンとサーバーのタイム ゾーンを認識しており、ユーザーのグローバル設定に従って時刻を調整して日付を設定しているにもかかわらず、日付/時刻から -6 を否定しています。未指定の種類。JSONシリアライザーが日付を調整しようとしないようにするにはどうすればよいですか?
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));
ISO日付は機能しているように見えますが、サードパーティのコントロールが古いMicrosoft形式を必要とするため、それらを使用できません...これによりタイムゾーンが調整されます。