首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EntityFunctions.DiffHours方法是如何工作的?

EntityFunctions.DiffHours方法是如何工作的?
EN

Stack Overflow用户
提问于 2014-06-12 18:05:38
回答 1查看 2.3K关注 0票数 2

我在文档中找不到任何东西来解释这个方法的细节。因为它总是返回一个整数,所以它不区分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才能得到实际时间?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-12 19:51:11

EF的一个好处是,它都是开源的。如果您深入研究源代码的这一部分,您会发现:

代码语言:javascript
复制
functionHandlers.Add("DiffHours", HandleCanonicalFunctionDateDiff);

这就要求:

代码语言:javascript
复制
// <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边界来工作的,所以它只是简单地截断所有秒,并且只比较年份、月、日和小时组件。

证明:

代码语言:javascript
复制
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
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24191093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档