我在文档中找不到任何东西来解释这个方法的细节。因为它总是返回一个整数,所以它不区分3:20的时差和3:10的时差。但是它是整整,还是舍入,还是仅仅比较2倍的小时部分?
例子: OpenTime = 2014-06-12 13:35:00.000 CloseTime = 2014-06-13 14:30:00.000
实际差别是24小时55分钟。这是24小时差,还是25小时差?
我需要确定两次是否相隔25小时或更长时间;我是否可以为此使用DiffHours,或者是否需要使用DiffSeconds并将结果除以3600才能得到实际时间?
发布于 2014-06-12 19:51:11
EF的一个好处是,它都是开源的。如果您深入研究源代码的这一部分,您会发现:
functionHandlers.Add("DiffHours", HandleCanonicalFunctionDateDiff);这就要求:
// <summary>
// Handler for all date/time addition canonical functions.
// Translation, e.g.
// DiffYears(datetime, number) => DATEDIFF(year, number, datetime)
// </summary>
private static ISqlFragment HandleCanonicalFunctionDateDiff(SqlGenerator sqlgen, DbFunctionExpression e)
{
var result = new SqlBuilder();
result.Append("DATEDIFF (");
result.Append(_dateDiffFunctionNameToDatepartDictionary[e.Function.Name]);
result.Append(", ");
result.Append(e.Arguments[0].Accept(sqlgen));
result.Append(", ");
result.Append(e.Arguments[1].Accept(sqlgen));
result.Append(")");
return result;
}所以这就是你的答案--呼叫EntityFunctions.DiffHours,只是转换成对SQL Server中的函数的调用。
因为DATEDIFF是通过计数datepart边界来工作的,所以它只是简单地截断所有秒,并且只比较年份、月、日和小时组件。
证明:
SELECT DATEDIFF(hour,'2014-01-01 00:00:00','2014-01-01 01:00:00')
-- returns 1 hour
SELECT DATEDIFF(hour,'2014-01-01 00:00:00','2014-01-01 01:01:00')
-- returns 1 hour
SELECT DATEDIFF(hour,'2014-01-01 00:00:00','2014-01-01 01:59:00')
-- returns 1 hour
SELECT DATEDIFF(hour,'2014-01-01 00:00:00','2014-01-01 00:59:00')
-- returns 0 hourshttps://stackoverflow.com/questions/24191093
复制相似问题