sql datediff的确切c#结果

本文关键字:结果 datediff sql | 更新日期: 2023-09-27 18:10:04

我试图在sql中获得天数(由u datediff计算)和c#中的天数(由datetime .now. subtract计算)相同,但它们返回不同的结果....

<>之前 //returns 0 int reso = DateTime.Now.Subtract(expirationDate).Days; 之前

<>之前 //returns 1 dateDiff(dd,getDate(),ExpirationDate) 之前

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

sql datediff的确切c#结果

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相同

在任何情况下隐身拉比的答案似乎更优雅,因为你正在寻找一个时间跨度而不是一个日期时间

10/1/2011距离DateTime.Now不到1天。因为你取回了一个TimeSpan然后对它应用了Days,你取回的TimeSpan是<1天。所以它会返回0天

相反,只需使用这些DateTimes的Date组件,它就会正确地报告间隔的天数-像这样:

DateTime now = DateTime.Now;
DateTime tomorrow = new DateTime(2011, 10, 1);
var val = (tomorrow.Date - now.Date).Days;

我假设您想要的是天数,而不是前一个最大单位的天数。你会想要使用TotalDays属性。此外,您可能会发现使用减号操作符进行减法

更容易。
DateTime d1 = DateTime.Now;
DateTime d2 = new DateTime(2009, 1, 2);
TimeSpan difference = d1 - d2;
Console.WriteLine(difference.TotalDays); // Outputs (today):1001.46817997424