Когда я компилирую и запускаю следующую программу, предназначенную для платформы .NET Framework 3.5, DateTime
, напечатанный на экране, - 11/1/2006 7:05:00 PM
. (Я нахожусь в Центральном часовом поясе.) Если я изменю свой проект на целевую платформу .NET 4.0 или выше и запустил программу, я получаю вывод 11/1/2006 6:05:00 PM
, на 1 час раньше.Изменения десериализованного значения DateTime в разных версиях .NET Framework
Я заметил, что при использовании Framework 3.5, если я изменил флажок моего компьютера на летнее время, выход изменится на 6:05 вечера, но при использовании Framework 4.x, внесении изменений в летнее время, влияют на выход программы.
Что происходит здесь и какое время является «правильным» временем? Почему изменение целевой структуры влияет на это?
using Newtonsoft.Json;
using System;
namespace Test
{
public class MyData
{
public DateTime? ActivationDate { get; set; }
}
public class Program
{
public static void Main()
{
string json = "{ \"ActivationDate\":\"\\/Date(1162425900000-0400)\\/\"}";
Console.WriteLine(JsonConvert.DeserializeObject<MyData>(json).ActivationDate);
}
}
}
Я нашел подобный вопрос (DateTime value is different across different versions of .NET framework), но ответ говорит, что именно региональные настройки и не рамочные, которые вызывают проблемы. Тем не менее, похоже, это не соответствует тому, что я наблюдаю в своей программе, в которой изменение результата (и переустановка пакета Nuget для Newtonsoft JSON) не влияет на результат.
Возможно, у него есть полезная информация: https://stackoverflow.com/questions/10029099/datetime-parse2012-09-30t230000-0000000z-always-converts-to-datetimekind-l, особенно по сравнению с версиями версии .NET. Я предполагаю, что Json.NET использует реализацию синтаксического анализа 'DateTime', поэтому это скорее вопрос' DateTime', чем что-либо, что связано с сериализацией или Json.NET –