gpt4 book ai didi

c# - 返回两次之间一天中的实际小时数

转载 作者:行者123 更新时间:2023-11-30 23:03:42 26 4
gpt4 key购买 nike

我现在有一个相当有趣的问题,我想返回两次之间的实际小时值。我不介意这是在 c# 还是 mysql 中,但我不确定该怎么做。

例如时间 1= 13:00 & 时间 2= 18:10

我想返回 13:00,14:00,15:00,16:00,17:00,18:00

有很多方法可以计算两次之间的小时数,我知道我可以使用该整数值并如下增加我的基本小时数,但我想知道是否有更简洁的方法?

数据库

timediff('2014-04-01 18:10:00', '2014-04-01 13:00:00' ) 

返回 05:10:00

hour('2014-04-01 13:00:00')

返回 13

按小时值递增 13

好像啰嗦了 :(

最佳答案

在 C# 中枚举从 startend 的所有(完整)时间:

public static IEnumerable<DateTime> Hours(DateTime start, DateTime end)
{
start -= TimeSpan.FromMinutes(start.TimeOfDay.TotalMinutes);
end -= TimeSpan.FromMinutes(end.TimeOfDay.TotalMinutes);

return Enumerable.Range(0, (int)Math.Ceiling((end - start).TotalHours))
.Select(x => begin + TimeSpan.FromHours(x));
}

首先,我们从间隔边界中删除分钟,我们只需要整小时(因此 10:30 和 11:10 将导致两个小时,而不仅仅是它们之间的差异)。然后我们创建一个从零到整小时数的枚举,我们将用它来创建从头开始的偏移量。我使用计算的 TimeSpan 作为偏移量开始 DateTime 以跟踪日期更改(例如,如果间隔边界跨越两天或更多天)。

例如,如果 start2014/04/01 10:25end2014/04/01 13:20 然后你会得到:

2014/04/01 10:002014/04/01 11:002014/04/01 12:002014/04/01 13:00

To get just time part change return type to IEnumerable<TimeSpan> and last Select() to:

.Select(x => (begin + TimeSpan.FromHours(x)).TimeOfDay);

在 SQL 中它可以完成,但它有点棘手,因为您需要一个包含整数序列的工作表。请注意以下代码未经测试。

首先您需要计算该差异:

CEIL(TIMESTAMPDIFF(MINUTE, startDate, endDate) / 60)

现在您可以使用一个工作表来填充偏移量的数字:

Value-----0123...

With this:

SELECT
DATE_ADD(startDate, INTERVAL Value HOUR)
FROM
NumericTable
WHERE
Value <= CEIL(TIMESTAMPDIFF(MINUTE, startDate, endDate) / 60)

在这两种情况下(C# 和 SQL),您可以将输出 DateTime/Date 替换为 TimeSpan/TIME 对象)。

关于c# - 返回两次之间一天中的实际小时数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22781289/

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