[ https://issues.apache.org/jira/browse/IGNITE-1644?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Pavel Tupitsyn updated IGNITE-1644: ------------------------------------ Description: Add the following test to PortableSelfTest.cs: {code} [Test] public void TestWriteDate() { DateTime time = DateTime.Now; DateTime timeUtc = DateTime.UtcNow; Assert.AreEqual(_marsh.Unmarshal<DateTime>(_marsh.Marshal(time)), time); Assert.AreEqual(_marsh.Unmarshal<DateTime>(_marsh.Marshal(timeUtc)), timeUtc); } {code} Observe that it fails becuase we loose DateTimeKind. This happens because we always write DateTime as UTC and lose DateTime.Kind, so on deserialization we do not know whether ToLocal should be called. Possible solutions: * write .Net DateTime in a different format, not compatible with Java (breaks queries) * throw exceptions for non-utc DateTime (force user to use UTC-only during serialization) was: For example, we write and then read from the same stream (locally): {code} var dt = DateTime.Now; writer.WriteObject(dt); var dt2 = reader.ReadObject<DateTime>(); Assert.AreEqual(dt, dt2); // fail {code} This happens because we always write DateTime as UTC and lose DateTime.Kind, so on deserialization we do not know whether ToLocal should be called. Possible solutions: * write .Net DateTime in a different format, not compatible with Java (breaks queries) * throw exceptions for non-utc DateTime (force user to use UTC-only during serialization) > .Net: DateTime.Kind is lost during serialization > ------------------------------------------------ > > Key: IGNITE-1644 > URL: https://issues.apache.org/jira/browse/IGNITE-1644 > Project: Ignite > Issue Type: Bug > Components: interop > Affects Versions: 1.5 > Reporter: Pavel Tupitsyn > Assignee: Pavel Tupitsyn > Fix For: 1.5 > > > Add the following test to PortableSelfTest.cs: > {code} > [Test] > public void TestWriteDate() > { > DateTime time = DateTime.Now; > DateTime timeUtc = DateTime.UtcNow; > Assert.AreEqual(_marsh.Unmarshal<DateTime>(_marsh.Marshal(time)), time); > Assert.AreEqual(_marsh.Unmarshal<DateTime>(_marsh.Marshal(timeUtc)), > timeUtc); > } > {code} > Observe that it fails becuase we loose DateTimeKind. > This happens because we always write DateTime as UTC and lose DateTime.Kind, > so on deserialization we do not know whether ToLocal should be called. > Possible solutions: > * write .Net DateTime in a different format, not compatible with Java (breaks > queries) > * throw exceptions for non-utc DateTime (force user to use UTC-only during > serialization) -- This message was sent by Atlassian JIRA (v6.3.4#6332)