diff --git a/src/SQLite.Net/SQLiteCommand.cs b/src/SQLite.Net/SQLiteCommand.cs index 9db0d705b..175983b96 100755 --- a/src/SQLite.Net/SQLiteCommand.cs +++ b/src/SQLite.Net/SQLiteCommand.cs @@ -473,7 +473,7 @@ private object ReadCol(IDbStatement stmt, int index, ColType type, Type clrType) { return new DateTime(_sqlitePlatform.SQLiteApi.ColumnInt64(stmt, index), DateTimeKind.Utc); } - return DateTime.Parse(_sqlitePlatform.SQLiteApi.ColumnText16(stmt, index), CultureInfo.InvariantCulture); + return DateTime.Parse(_sqlitePlatform.SQLiteApi.ColumnText16(stmt, index), CultureInfo.InvariantCulture).ToUniversalTime(); } if (clrType == typeof (DateTimeOffset)) { @@ -488,7 +488,7 @@ private object ReadCol(IDbStatement stmt, int index, ColType type, Type clrType) } else { - value = DateTime.Parse(_sqlitePlatform.SQLiteApi.ColumnText16(stmt, index), CultureInfo.InvariantCulture); + value = DateTime.Parse(_sqlitePlatform.SQLiteApi.ColumnText16(stmt, index), CultureInfo.InvariantCulture).ToUniversalTime(); } return Activator.CreateInstance(clrType, value); } diff --git a/tests/DateTimeTest.cs b/tests/DateTimeTest.cs index 5170f8bbc..ae623f570 100644 --- a/tests/DateTimeTest.cs +++ b/tests/DateTimeTest.cs @@ -57,6 +57,9 @@ private void TestDateTime(TestDb db) Assert.AreEqual(fromDb.Time1.ToLocalTime(), org.Time1.ToLocalTime()); Assert.AreEqual(fromDb.Time2.ToLocalTime(), org.Time2.ToLocalTime()); + + Assert.AreEqual(fromDb.Time1.Kind, DateTimeKind.Utc); + Assert.AreEqual(fromDb.Time2.Kind, DateTimeKind.Utc); } [Test] diff --git a/tests/SerializableTest.cs b/tests/SerializableTest.cs index f2eaf5fe2..63f22cc99 100644 --- a/tests/SerializableTest.cs +++ b/tests/SerializableTest.cs @@ -133,6 +133,34 @@ public void SupportsSerializableDateTime() Assert.That(found.DateTimeValue.InnerValue.ToLocalTime(), Is.EqualTo(value1.ToLocalTime())); Assert.That(found.DateTimeValue2.InnerValue.ToLocalTime(), Is.EqualTo(value2.ToLocalTime())); + + Assert.That(found.DateTimeValue.InnerValue.Kind, Is.EqualTo(DateTimeKind.Utc)); + Assert.That(found.DateTimeValue2.InnerValue.Kind, Is.EqualTo(DateTimeKind.Utc)); + } + + [Test] + public void SupportsSerializableDateTimeWithStrings() + { + var dbStrings = new TestDb(storeDateTimeAsTicks: false); + dbStrings.CreateTable(); + + DateTime value1 = DateTime.UtcNow; + DateTime value2 = DateTime.Now; + var model = new ComplexType + { + DateTimeValue = new SerializableDateTime(value1), + DateTimeValue2 = new SerializableDateTime(value2) + }; + dbStrings.Insert(model); + ComplexType found = dbStrings.Get(m => m.ID == model.ID); + Assert.That(found.DateTimeValue.InnerValue.ToUniversalTime(), Is.EqualTo(value1.ToUniversalTime())); + Assert.That(found.DateTimeValue2.InnerValue.ToUniversalTime(), Is.EqualTo(value2.ToUniversalTime())); + + Assert.That(found.DateTimeValue.InnerValue.ToLocalTime(), Is.EqualTo(value1.ToLocalTime())); + Assert.That(found.DateTimeValue2.InnerValue.ToLocalTime(), Is.EqualTo(value2.ToLocalTime())); + + Assert.That(found.DateTimeValue.InnerValue.Kind, Is.EqualTo(DateTimeKind.Utc)); + Assert.That(found.DateTimeValue2.InnerValue.Kind, Is.EqualTo(DateTimeKind.Utc)); } [Test]