6

I have next code:

DateTime endTime = DateTime.Now.AddDays(30);
InsertIntoDatabase(endTime);
var row = Db.SelectRow("select endTime from MyTable Where @column=myval", columnValue);
Assert.Equal(row["endTime"], endTime); // This is false! Why?

Assert is false. And dates are different for some reason on milliseconds. Why???

endTime:

Date    {7/17/2015 12:00:00 AM} System.DateTime
        Day 17  int
        DayOfWeek   Friday  System.DayOfWeek
        DayOfYear   198 int
        Hour    1   int
        Kind    Unspecified System.DateTimeKind
        Millisecond 370 int
        Minute  21  int
        Month   7   int
        Second  27  int
        Ticks   635726928873700000  long
+       TimeOfDay   {01:21:27.3700000}  System.TimeSpan
        Year    2015    int

row["endTime"]:

Date    {7/17/2015 12:00:00 AM} System.DateTime
        Day 17  int
        DayOfWeek   Friday  System.DayOfWeek
        DayOfYear   198 int
        Hour    1   int
        Kind    Local   System.DateTimeKind
        Millisecond 371 int
        Minute  21  int
        Month   7   int
        Second  27  int
        Ticks   635726928873716049  long
+       TimeOfDay   {01:21:27.3716049}  System.TimeSpan
        Year    2015    int

WHY???

Ksice
  • 3,277
  • 9
  • 43
  • 67

2 Answers2

5

Maybe this (Difference between DateTime in c# and DateTime in SQL server) will help a little.

you can also use Datetime2 for SQL

Community
  • 1
  • 1
sangram parmar
  • 8,462
  • 2
  • 23
  • 47
0

Looks like a rounding error to me, the DateTime has ticks of 635726928873700000 whereas the Row has 635726928873716049. This is probably due to differing levels of precision in the database vs DateTime.

The differences in ticks means they are different DateTimes.

mattumotu
  • 1,436
  • 2
  • 14
  • 35