gpt4 book ai didi

c# - DateTime.Compare 未按预期工作

转载 作者:行者123 更新时间:2023-11-30 20:22:21 24 4
gpt4 key购买 nike

我通过以下方式插入客户。

DateTime d = DateTime.Now;

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

SaveToDatbase(CustomerList);

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

foreach(Customer cus in GetFromDatabase())
{
Response.Write(DateTime.Compare(cus.EntryDate, d));
}

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

最佳答案

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

According to MSDN ,SQL Server 中的 datetime 类型的分辨率约为 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;

关于c# - DateTime.Compare 未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32083753/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com