2015-06-17 19 views
5

Ho codice seguente:DateTime non è uguale

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 è falso. E le date sono diverse per qualche motivo in millisecondi. Perché???

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 

riga [ "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 

PERCHE ???

+1

Questi due 'DateTimes' non sono uguali. Guarda le "zecche" su entrambi. –

+0

Anche le loro "zecche" non sono uguali. –

+0

'DateTime' dovrebbe essere lo stesso, sei sicuro che stai usando il parametro passato e non qualcos'altro in' InsertIntoDataBase'? – Sinatr

risposta

5

Forse this (Difference between DateTime in c# and DateTime in SQL server) aiuterà un po '.

è anche possibile utilizzare Datetime2 per SQL

+3

Questa è la "vera" risposta, ma forse potresti spiegare con qualche dettaglio in più –

+0

sì, ma penso che post per posta, possa sia esso modificherà ed è per questo che lo indico al post originale. :) –

+0

Sì, ma è necessario includere alcuni TL; DR almeno. non dovrebbe accadere, ma se la risposta originale viene cancellata, allora questo post sarebbe inutile –

0

Sembra un errore di arrotondamento per me, il DateTime ha zecche di 635726928873700000 mentre il ha 635726928873716049. Ciò è probabilmente dovuto a diversi livelli di precisione nel database rispetto a DateTime.

Le differenze in zecche indicano che sono DateTimes differenti.