Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions src/SQLite.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1785,6 +1785,8 @@ public static string SqlType (TableMapping.Column p, bool storeDateTimeAsTicks)
return "varchar(" + len + ")";
} else if (clrType == typeof(DateTime)) {
return storeDateTimeAsTicks ? "bigint" : "datetime";
} else if (clrType == typeof(DateTimeOffset)) {
return "bigint";
#if !NETFX_CORE
} else if (clrType.IsEnum) {
#else
Expand Down Expand Up @@ -2068,6 +2070,8 @@ internal static void BindParameter (Sqlite3Statement stmt, int index, object val
else {
SQLite3.BindText (stmt, index, ((DateTime)value).ToString ("yyyy-MM-dd HH:mm:ss"), -1, NegativePointer);
}
} else if (value is DateTimeOffset) {
SQLite3.BindInt64 (stmt, index, ((DateTimeOffset)value).UtcTicks);
#if !NETFX_CORE
} else if (value.GetType().IsEnum) {
#else
Expand Down Expand Up @@ -2116,6 +2120,8 @@ object ReadCol (Sqlite3Statement stmt, int index, SQLite3.ColType type, Type clr
var text = SQLite3.ColumnString (stmt, index);
return DateTime.Parse (text);
}
} else if (clrType == typeof(DateTimeOffset)) {
return new DateTimeOffset(SQLite3.ColumnInt64 (stmt, index),TimeSpan.Zero);
#if !NETFX_CORE
} else if (clrType.IsEnum) {
#else
Expand Down
78 changes: 78 additions & 0 deletions tests/DateTimeOffsetTest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
using System;

#if NETFX_CORE
using Microsoft.VisualStudio.TestPlatform.UnitTestFramework;
using SetUp = Microsoft.VisualStudio.TestPlatform.UnitTestFramework.TestInitializeAttribute;
using TestFixture = Microsoft.VisualStudio.TestPlatform.UnitTestFramework.TestClassAttribute;
using Test = Microsoft.VisualStudio.TestPlatform.UnitTestFramework.TestMethodAttribute;
#else
using NUnit.Framework;
#endif

namespace SQLite.Tests
{
[TestFixture]
public class DateTimeOffsetTest
{
class TestObj
{
[PrimaryKey, AutoIncrement]
public int Id { get; set; }

public string Name { get; set; }
public DateTimeOffset ModifiedTime { get; set; }
}


[Test]
public void AsTicks ()
{
var db = new TestDb ();
TestDateTimeOffset (db);
}


[Test]
public void AsyncAsTicks ()
{
var db = new SQLiteAsyncConnection (TestPath.GetTempFileName ());
TestAsyncDateTimeOffset (db);
}

void TestAsyncDateTimeOffset (SQLiteAsyncConnection db)
{
db.CreateTableAsync<TestObj> ().Wait ();

TestObj o, o2;

//
// Ticks
//
o = new TestObj {
ModifiedTime = new DateTimeOffset (2012, 1, 14, 3, 2, 1, TimeSpan.Zero),
};
db.InsertAsync (o).Wait ();
o2 = db.GetAsync<TestObj> (o.Id).Result;
Assert.AreEqual (o.ModifiedTime, o2.ModifiedTime);
}

void TestDateTimeOffset (TestDb db)
{
db.CreateTable<TestObj> ();

TestObj o, o2;

//
// Ticks
//
o = new TestObj {
ModifiedTime = new DateTimeOffset (2012, 1, 14, 3, 2, 1, TimeSpan.Zero),
};
db.Insert (o);
o2 = db.Get<TestObj> (o.Id);
Assert.AreEqual (o.ModifiedTime, o2.ModifiedTime);
}

}
}

1 change: 1 addition & 0 deletions tests/SQLite.Tests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -69,5 +69,6 @@
<Compile Include="OpenTests.cs" />
<Compile Include="MigrationTest.cs" />
<Compile Include="EqualsTest.cs" />
<Compile Include="DateTimeOffsetTest.cs" />
</ItemGroup>
</Project>