将ISO 8601日期时间从JSON对象解析为本地时间

时间:2017-07-09 14:44:19

标签: json.net

我有一个从我的其他进程返回的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,这是错误的,如何将此转换回当地时间?

1 个答案:

答案 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。)