使用zulu格式序列化datetime丢失的有关timeZone的信息

时间:2019-06-20 16:24:11

标签: c# json.net datetime-format utc

当我尝试使用JObject(Newtonsoft)时,我丢失了一些zulu日期格式的数据

var s = "{  \"DateTimeZulu\": \"2019-06-12T08:50:20.626Z\",  \"DateTimeUtc\": \"2019-06-12T08:50:20.626+00:00\" }";
var jsonEntity = (JObject.Parse(s));
foreach (KeyValuePair<string, JToken> current in jsonEntity)
{
    Console.WriteLine(current.Key + " - " + current.Value.ToString());
}

实际输出:

DateTimeZulu - 12/06/2019 08:50:20  
DateTimeUtc - 12/06/2019 10:50:20  

预期输出:

DateTimeZulu - 12/06/2019 10:50:20  
DateTimeUtc - 12/06/2019 10:50:20  

1 个答案:

答案 0 :(得分:2)

信息不会丢失。如果您检查current.Value的内容,则会看到Kind属性的区别。

对于第一个值类型为UTC,对于第二个值类型为Local。如果影响日期将如何转换为字符串。

您可以使用ToUniversalTimeToLocalTime函数来在UTC和本地之间转换DateTime。尝试以下示例以查看区别:

    var s = "{  \"DateTimeZulu\": \"2019-06-12T08:50:20.626Z\",  \"DateTimeUtc\": \"2019-06-12T08:50:20.626+00:00\" }";
    var jsonEntity = (JObject.Parse(s));
    foreach (KeyValuePair<string, JToken> current in jsonEntity)
    {  
        Console.WriteLine(current.Key + " - " + ((DateTime)current.Value).ToLocalTime().ToString());
        Console.WriteLine(current.Key + " - " + ((DateTime)current.Value).ToUniversalTime().ToString());
    }