反序列化日期保持本地时间
Posted
技术标签:
【中文标题】反序列化日期保持本地时间【英文标题】:Deserilize date keeping local time 【发布时间】:2017-09-16 21:44:02 【问题描述】:Json 日期很难,转换似乎在逃避我。它似乎丢失了转换中的时间部分。
我从 API 返回以下 Json Microsoft 日期。我知道并且可以确认日期是 2017 年 5 月 5 日早上 7 点
但是,当使用 newtonsoft 反序列化日期时,我可以让它保留时区信息。我已经尝试了所有各种设置,但无法解决这个问题。
我的反序列化代码如下所示
var settings = new JsonSerializerSettings
DateFormatHandling = DateFormatHandling.MicrosoftDateFormat,
DateParseHandling = DateParseHandling.DateTimeOffset,
DateTimeZoneHandling = DateTimeZoneHandling.RoundtripKind
;
items = JsonConvert.DeserializeObject<List<UpcomingMeetingListDto>>(
responseContent, settings);
当然,这一定很容易,我只是可以理解它。我想一定是因为json中的日期格式没有关联的TZ信息。也许我需要一个自定义日期反序列化器来处理这种情况或设置文化。
我正在使用 Newtonsoft.Json 版本 9.0.1
【问题讨论】:
1493704800000
是格林威治标准时间 2017 年 5 月 2 日。您使用的是哪个时区?
【参考方案1】:
DateTime 已正确反序列化,但它是 GMT 格式。要显示本地时间,您应该使用 ToLocalTime() 方法。
例如,通过向您的 UpcomingMeetingListDto 添加一个属性。
public DateTime LocalMeetingDate => MeetingDate.ToLocalTime();
试试这个online epoch converter,它会显示本地时间和格林威治标准时间。
【讨论】:
谢谢 想疯了 错误地假设是早上 7 点 真正有趣的是在我序列化它是早上 7 点之前在数据库中。认为序列化正在发挥作用:) 使用 mvc 5,2 JsonResult。给了我一些东西来看看 感谢您帮助我解决这个问题并给我发送了一个更好的在线时代工具。我最终使用SpecifyKind
` 序列化到 UTC以上是关于反序列化日期保持本地时间的主要内容,如果未能解决你的问题,请参考以下文章