c# - sql datediff 的精确 c# 结果

标签 c# sql sql-server datetime datediff

我试图让 sql 中的天数(由 u datediff 计算)和 c# 中的天数(由 DateTime.now.Substract 计算)相同,但它们返回不同的结果....


//returns 0
int reso = DateTime.Now.Subtract(expirationDate).Days;

对比


//returns 1
dateDiff(dd,getDate(),ExpirationDate)

在这两种情况下,ExpirationDate 都是“10/1/2011 00:00:00”,代码和数据库位于同一台服务器上。我希望 return int 相同。我怀疑我错过了一些愚蠢的东西……想法??

最佳答案

dateDiff(dd,getDate(),ExpirationDate) 正在进行天比较。 DateTime.Now.Subtract(expirationDate).Days 正在处理日期和时间

例如

SELECT dateDiff(dd,'10/1/2011 23:59:00' , '10/2/2011') 返回一天,即使相隔只有一分钟。

如果您想在 C# 中使用相同的内容,则需要删除时间组件

例如

DateTime  dt1 = new DateTime(2011,10,1, 23,59,0);
DateTime  dt2 = new DateTime(2011,10,2, 0,0,0);

Console.WriteLine((int) dt2.Subtract(dt1.Subtract(dt1.TimeOfDay)));

所以在你的情况下它会是这样的

DateTime CurrentDate = DateTime.Now;
int reso = CurrentDate.Subtract(CurrentDate.TimeOfDay).Subtract(DateTime.expirationDate).Days;

我没有测试过,但我不会这样做 DateTime.Now.Subtract(DateTime.Now.Subtract.TimeOfDay)

因为对 Now 的第二次调用不能保证与对 Now 的第一次调用相同

无论如何,Stealth Rabbi 的回答似乎更优雅,因为您正在寻找 TimeSpan 而不是 DateTime

关于c# - sql datediff 的精确 c# 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7612383/

相关文章:

c# - 如何确定sql server中连续的日期记录

c# - Xaml 和事件不起作用

mysql - 如果列没有特定文本,如何更改列的值?

c# - String.Empty 或 null : what is better to return for "Error" field from service?

java - 合并多个表的 SQL 语法

MySQL:如何自动记录上次密码更新的时间戳

sql - 为什么将 SQL 日期变量与 null 进行比较会出现这种情况?

sql-server - TSQL - 返回我们需要填充的所有记录 ID 和缺失的 ID

c# - 为什么在 C# 中捕获并重新抛出异常?

java - 如何使用 JAVA 或 C# 中的 Web 服务或 REST API 在 Microsoft Dynamics CRM 2016(版本 8)中创建案例?