我以下列方式插入客户.
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.我在这里做错了什么?
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)
| 归档时间: |
|
| 查看次数: |
1244 次 |
| 最近记录: |