DateTime.Compare未按预期工作

use*_*180 2 c# asp.net c#-4.0

我以下列方式插入客户.

DateTime d = DateTime.Now;

foreach(Customer cus in CustomerList)
{
    cus.EntryDate = d;
}

SaveToDatbase(CustomerList);
Run Code Online (Sandbox Code Playgroud)

使用正确的输入日期成功保存日期,但是当我检索数据并将其与变量d进行比较时,它不匹配.

foreach(Customer cus in GetFromDatabase())
{
    Response.Write(DateTime.Compare(cus.EntryDate, d));
}
Run Code Online (Sandbox Code Playgroud)

输出为1而不是0.我检查了插入的数据,它与d变量值匹配,毫秒.日期存储在sql server数据库中.我意识到的一件事是,如果我为cus.EntryDate和d重置毫秒为0,则输出为0.我在这里做错了什么?

Dai*_*Dai 5

SQL Server的datetime类型的分辨率低于.NET.当你DateTime.Now直接使用(没有将它舍入到最接近的秒)时,你会看到毫秒或刻度(100纳秒)部分的差异.

根据MSDN,datetimeSQL Server中的类型具有大约3毫秒的分辨率(具体为:2015-08-18 15:49:10.000- > 2015-08-18 15:49:10.003- > 2015-08-18 15:49:10.007- > 2015-08-18 15:49:10.010),而.NET的DateTime类型具有100纳秒的分辨率.

如果你想保持某种平等,我建议DateTime在插入数据库之前四舍五入到最接近的秒:

DateTime now = DateTime.Now;
now = new DateTime(
    now.Ticks - ( now.Ticks % TimeSpan.TicksPerSecond ),
    now.Kind
);

foreach(Customer cus in customerList) cus.EntryDate = now;
Run Code Online (Sandbox Code Playgroud)