Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# sql datediff的精确c结果_C#_Sql_Sql Server_Datetime_Datediff - Fatal编程技术网

C# sql datediff的精确c结果

C# sql datediff的精确c结果,c#,sql,sql-server,datetime,datediff,C#,Sql,Sql Server,Datetime,Datediff,我试图得到sql中U datediff计算的天数和c中DateTime.now.Substract计算的天数是相同的,但它们返回的结果不同 //returns 0 int reso = DateTime.Now.Subtract(expirationDate).Days; vs 在这两种情况下,ExpirationDate都是“10/1/2011 00:00:00”,代码和数据库位于同一台服务器上。我希望返回的int是相同的。我怀疑我错过了一些愚蠢的事情。。。想法???dateDiffdd、

我试图得到sql中U datediff计算的天数和c中DateTime.now.Substract计算的天数是相同的,但它们返回的结果不同


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

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

dateDiffdd、getDate、ExpirationDate正在进行天数比较。DateTime.Now.SubtractexpirationDate.Days正在执行日期和时间

比如说

选择dateDiffdd,'10/1/2011 23:59:00','10/2/2011'返回一天,即使只相隔一分钟

如果您想在C中实现同样的功能,则需要删除时间组件

e、 g

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

DateTime CurrentDate = DateTime.Now;
int reso = CurrentDate.Subtract(CurrentDate.TimeOfDay).Subtract(DateTime.expirationDate).Days;
我没有测试过,但我不会 DateTime.Now.Subtract DateTime.Now.Subtract.TimeOfDay

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


无论如何,隐形拉比的回答似乎更优雅,因为你要寻找的是时间跨度而不是日期时间,2011年10月1日离日期时间不到一天。因为你得到的是一个时间跨度,然后对它应用天,你得到的时间跨度小于1天。所以它将返回0天

相反,只需使用这些DateTimes的Date组件,它将正确报告相隔的天数-如下所示:

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

这将为您提供1天。

我假设您想要的是总天数,而不是前一个最大单元的天数。您可能希望使用TotalDays属性。此外,您可能会发现使用减号运算符进行减法运算更容易

DateTime d1 = DateTime.Now;
DateTime d2 = new DateTime(2009, 1, 2);

TimeSpan difference = d1 - d2;
Console.WriteLine(difference.TotalDays); // Outputs (today):1001.46817997424 

两者使用同一时区吗?也许可以改为尝试DateTime.UtcNow?int differenceInDays=new DateTimeDateTime.Now.Year,DateTime.Now.Month,DateTime.Now.Day.subtract new DateTimeotherDate.Year,otherDate.Month,otherDate.Day;似乎不起作用,因为我要减去的日期已经去掉了时间,即2011年10月1日00:00:00,所以它返回的是相同的0,而sql datediff返回的是1DateTime。现在除了一个caseRight之外,没有时间去掉,但如果sql和c中的datetime都相同,那么它们应该返回相同的值,但似乎没有-除非我按照@itsmat所说的做,也就是减去.Date-反正它是有帮助的,所以+1!我不会争辩说伊萨马特和隐形拉比的答案不干净,接受这两个答案对我来说都没问题。但我的回答确实得出了同样的答案。可能您错过了.SubtractCurrentDate.TimeOfDay部分。此部分有效。。。我认为关键是减去“日期”,而不仅仅是日期时间变量。。。
DateTime now = DateTime.Now;
DateTime tomorrow = new DateTime(2011, 10, 1);
var val = (tomorrow.Date - now.Date).Days;
DateTime d1 = DateTime.Now;
DateTime d2 = new DateTime(2009, 1, 2);

TimeSpan difference = d1 - d2;
Console.WriteLine(difference.TotalDays); // Outputs (today):1001.46817997424