我有一个从我的其他进程返回的Json对象,该对象的内容如下:
{
"nextDrawTime": "2017-07-10T05:33:44.914Z",
"winnerSelectionProcess": {
"mode": "idle"
}
}
我的问题是,当我像这样使用Json.NET解析这个对象时,它返回了错误的日期时间:
dynamic Jobj = JsonConvert.DeserializeObject(myJson);
Console.Write(Jobj["nextDrawTime"].ToString());
日期时间是:15/07/2017 5:33:44 AM,这是错误的,如何将此转换回当地时间?
答案 0 :(得分:0)
您可以在反序列化时使用设置DateTimeZoneHandling = DateTimeZoneHandling.Local
。如docs中所述,此设置将
将[日期和时间]视为当地时间。如果DateTime对象表示Coordinated 世界时(UTC),它被转换为当地时间。
即:
var settings = new JsonSerializerSettings
{
DateTimeZoneHandling = DateTimeZoneHandling.Local,
};
dynamic Jobj = JsonConvert.DeserializeObject(myJson, settings);
或者,您可以在解析后始终致电DateTime.ToLocalTime()
:
var localNextDrawTime = ((DateTime)Jobj["nextDrawTime"]).ToLocalTime();
示例fiddle(问题有点难以重现,因为dotnetfiddle的本地时间实际上是UTC。)