Newtonsoft.Json icon indicating copy to clipboard operation
Newtonsoft.Json copied to clipboard

IsoDateTimeConverter appears to corrupt the date on serialization

Open RobinHSanner opened this issue 6 years ago • 1 comments

Using the code: JsonSerializerSettings serializerSettings = new JsonSerializerSettings { DateFormatHandling = DateFormatHandling.IsoDateFormat, DateParseHandling = DateParseHandling.DateTime, DateTimeZoneHandling = DateTimeZoneHandling.Utc, }; IsoDateTimeConverter converter = new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal, }; serializerSettings.Converters.Add(converter); string value = JsonConvert.SerializeObject(DateTime.Parse("2013-11-18T19:55:36.87"), serializerSettings);

Produces the value: "2013-11-19T00:55:36.87Z" My current timezone is UTC-5 which shows that it's actually converting the DateTime to UTC first rather than "AssumeUniversal"

RobinHSanner avatar Sep 11 '19 18:09 RobinHSanner

I also ran into this. This code seems wrong: https://github.com/JamesNK/Newtonsoft.Json/blob/55a7204f9b9546aa07145591d42046d509176ad4/Src/Newtonsoft.Json/Converters/IsoDateTimeConverter.cs#L88

When used on a DateTime with a Kind of Unspecified, the ToUniversalTime() method assumes the time is a local time, which doesn't seem correct if DateTimeStyles.AssumeUniversal is set.

douggish avatar Mar 26 '24 17:03 douggish