【发布时间】:2021-11-24 23:00:42
【问题描述】:
我在 Kind Utc 的这个对象中有一些 DateTime:
Model.Calendar
当我尝试序列化它时:
var calendar = @Html.Raw(JsonConvert.SerializeObject(Model.Calendar, new JsonSerializerSettings
{
DateTimeZoneHandling = DateTimeZoneHandling.Utc
}));
我看到它忽略了 DateTime Utc。这是日历变量的console.log:
没有+2。 当我获取这个对象并通过 MVC 控制器发回后端时,日历对象的 DateTime 是 Kind Local:
$.ajax({
url: '@Url.Action("UpdateCalendar")',
data: { id: @Model.CalendarItem.ID, newCalendar: calendar, selectedMonth: $('.select-month').val() },
method: 'POST',
beforeSend: function () {
ShowLoading();
},
success: function (data) {
//
},
error: function (ex) {
//
},
complete: function () {
//
}
});
public PartialViewResult UpdateCalendar(long id, List<List<CalendarDay>> newCalendar, int selectedMonth) {
// here newCalendar's DateTime are Kind Local
}
我猜是序列化的问题吗?我该如何解决?
【问题讨论】:
-
您为什么期望 UTC
DateTime值(序列化为 UTC)包含+2时区偏移量?这听起来更像是一个反序列化问题。 -
@RichardDeeming 你的意思是在接收 newCalendar 对象服务器端时?
-
是的。您发送给客户端的数据和您显示的设置看起来是正确的。问题似乎是服务器假设从客户端发送的值是
Local值而不是Utc值。 -
就我个人而言,我更倾向于使用
DateTimeOffset,它应该在您往返客户端时保留时区偏移。或者改用 NodaTime,这将是一项更大的任务。 -
@RichardDeeming 如果我在序列化时删除 DateTimeOffset ,也会出现同样的问题。如何在服务器端修复它?
标签: jquery asp.net-mvc datetime utc