我正在计算两个日期的日差。 在C#
diffdays = (EndDate-StartDate).Days
所以考虑到Enddate为2015年6月26日,并且在2015年6月10日开始时,diffdays值为15,如调试时的Autos部分所示。
在SQL服务器中,我正在做的是
SELECT DATEDIFF(day, StartDate, EndDate )
其中EndDate是2015年6月26日,startdate是2015年6月10日,结果为16。
我需要这两天的差异是一样的。我做错了什么?
答案 0 :(得分:4)
TimeSpan.Days
属性仅返回整天,丢弃任何小数部分。根据您的两个DateTime
的时间部分,您可能会看到您所看到的行为。
尝试使用Date
属性将时间部分取出等式(并有效地将两次设置为午夜):
diffdays = (EndDate.Date - StartDate.Date).Days
或者,您可以对TotalDays
属性进行舍入(包括天数的小数部分):
diffdays = Math.Ceiling((EndDate - StartDate).TotalDays);
答案 1 :(得分:1)
DATEDIFF
函数计算通过指定为单位的边界的次数,而.NET的DateTime.Subtract()
函数(通过使用minus运算符隐式使用此函数)返回实际两个日期之间TimeSpan
,因此您必须看到两个结果之间存在差异。
以下查询将返回1:
SELECT DATEDIFF(day, '1/1/2015 23:58:00', '1/2/2015 00:02:00')
两个日期之间只有4分钟的差异,但由于两个日期(午夜12:00)之间经过了一天的边界,它返回1.相同的两个日期将返回{{1}在C#中4分钟。如果您仅查看该TimeSpan
对象的Days
部分(不是TotalDays
)(正如您上面所做的那样),您将获得0。
答案 2 :(得分:0)
在C#中,您计算两个日期之间的天数。在SQL中,DATEDIFF
函数是计算第一个日期之后的天数,包括结束日期。
要解决此问题,最简单的方法是在C#diffdays
变量中添加1。
答案 3 :(得分:0)
您的C#代码返回奇怪的结果...我创建了简单的控制台应用程序,并且变量的差异等于16,就像在sql server中一样
DateTime startDate = new DateTime(2015, 6, 10);
DateTime endDate = new DateTime(2015, 6, 26);
var differ = (endDate - startDate).Days;
请仔细检查您的C#结果