Gen*_*ari 2 .net datetime entity-framework timespan
我在文档中找不到任何解释此方法细节的内容.因为它总是返回一个整数,所以它不区分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小时的差异吗?
我需要确定2次是否相隔25小时或更长时间; 我可以使用DiffHours,还是需要使用DiffSeconds并将结果除以3600以获得实际小时数?
EF的一个好处是它都是开源的.如果你仔细研究这部分源代码,你会发现:
functionHandlers.Add("DiffHours", HandleCanonicalFunctionDateDiff);
Run Code Online (Sandbox Code Playgroud)
哪个召唤:
// <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;
}
Run Code Online (Sandbox Code Playgroud)
所以有你的答案 - 调用EntityFunctions.DiffHours
只是转换为对SQL Server中的本机DATEDIFF
函数的调用.
由于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 hours
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1721 次 |
最近记录: |