gpt4 book ai didi

.net - EntityFunctions.DiffHours 方法如何工作?

转载 作者:行者123 更新时间:2023-12-02 00:33:37 26 4
gpt4 key购买 nike

我在文档中找不到任何解释此方法细节的内容。因为它始终返回一个整数,所以它不区分 3:20 的时间差和 3:10 的时间差。但它是向上舍入,还是向下舍入,还是只是比较 2 次的小时部分?

示例:开放时间 = 2014-06-12 13:35:00.000关闭时间 = 2014-06-13 14:30:00.000

实际相差24小时55分钟。这会返回 24 小时还是 25 小时的差异?

我需要确定2次是否相隔25小时或更长时间;我可以使用 DiffHours 来实现此目的,还是需要使用 DiffSeconds 并将结果除以 3600 以获得实际小时数?

最佳答案

EF 的一个好处是它完全开源。如果你深入挖掘this part of the source code ,你会发现:

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 只是转换为对 native DATEDIFF function in SQL Server 的调用.

由于 DATEDIFF 通过计算日期部分边界来工作,因此它只是截断所有秒并仅比较年、月、日和小时部分。

证明:

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

关于.net - EntityFunctions.DiffHours 方法如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24191093/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com