Сериализация даты и времени потерянной информации о часовом поясе в формате зулу - PullRequest
0 голосов
/ 20 июня 2019

Когда я пытаюсь использовать JObject (Newtonsoft), я теряю некоторые данные с форматом даты Зулу

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 Ответ

2 голосов
/ 20 июня 2019

Информация не теряется. Если вы проверите содержимое current.Value, вы увидите разницу в свойстве Kind.

Для первого типа значения UTC, для второго типа значения Local. Если влияет, как дата будет преобразована в строку.

Вы можете конвертировать DateTime между UTC и Local, используя ToUniversalTime или ToLocalTime functoins. Попробуйте следующий пример, чтобы увидеть разницу:

    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());
    }
...