M.R*_*.R. 3 c# sql sql-server datetime datediff
我试图在sql中获取天数(由by datediff计算)和c#中的天数(由DateTime.now.Substract计算)相同,但它们返回不同的结果....
//returns 0
int reso = DateTime.Now.Subtract(expirationDate).Days;
VS
//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)));
Run Code Online (Sandbox Code Playgroud)
所以在你的情况下它会是这样的
DateTime CurrentDate = DateTime.Now;
int reso = CurrentDate.Subtract(CurrentDate.TimeOfDay).Subtract(DateTime.expirationDate).Days;
Run Code Online (Sandbox Code Playgroud)
我没有测试过,但我不会这样做
DateTime.Now.Subtract(DateTime.Now.Subtract.TimeOfDay)
因为对Now的第二次调用不能保证与第一次调用Now相同
无论如何,Stealth Rabbi的答案似乎更优雅,因为你正在寻找TimeSpan而不是DateTime