gpt4 book ai didi

c# - 获取两个日期时间之间的(满)小时列表

转载 作者:太空狗 更新时间:2023-10-30 00:20:38 26 4
gpt4 key购买 nike

我编写了一个函数来包含两个 DateTime 之间的小时列表。

但最后它看起来并不是很容易阅读,这让我想对它进行单元测试,即使我正在从事的项目根本没有进行单元测试。

所以我的问题是,是否有一种更易读或更有效的方式来编写此内容?:

代码:

private List<DateTime> GetHoursForEvent(DateTime start, DateTime end)
{
var hours = new List<DateTime>();

DateTime startFloor = Convert.ToDateTime(start.ToString("MM/dd/yyyy HH:00:00"));
DateTime endFloor = Convert.ToDateTime(end.ToString("MM/dd/yyyy HH:00:00"));

for (double dblDate = startFloor.ToOADate();
dblDate <= endFloor.ToOADate();
dblDate += (1.0 / 24.0))
{
hours.Add(DateTime.FromOADate(dblDate));
}

return hours;
}

输入:

DateTime start = Convert.ToDateTime("2012-04-01 04:22:00");
DateTime end = Convert.ToDateTime("2012-04-02 00:05:00");

结果:

2012-04-01 04:00:00
2012-04-01 05:00:00
2012-04-01 06:00:00
2012-04-01 07:00:00
2012-04-01 08:00:00
2012-04-01 09:00:00
2012-04-01 10:00:00
2012-04-01 11:00:00
2012-04-01 12:00:00
2012-04-01 13:00:00
2012-04-01 14:00:00
2012-04-01 15:00:00
2012-04-01 16:00:00
2012-04-01 17:00:00
2012-04-01 18:00:00
2012-04-01 19:00:00
2012-04-01 20:00:00
2012-04-01 21:00:00
2012-04-01 22:00:00
2012-04-01 23:00:00
2012-04-02 00:00:00

我觉得我正在重新发明轮子。

最佳答案

是的,像这样的东西应该更适合你:

private List<DateTime> GetHoursForEvent(DateTime start, DateTime end)
{
var hours = new List<DateTime>();
var current = new DateTime(start.Year, start.Month, start.Day, start.Hour, 0, 0);
while(current <= end)
{
hours.Add(current);
current = current.AddHours(1);
}
return hours;
}

你甚至可能想把它变成一个流方法,除非有特定的原因你需要返回一个 List:

private IEnumerable<DateTime> GetHoursForEvent(DateTime start, DateTime end)
{
var current = new DateTime(start.Year, start.Month, start.Day, start.Hour, 0, 0);
while(current <= end)
{
yield return current;
current = current.AddHours(1);
}
}

关于c# - 获取两个日期时间之间的(满)小时列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10197519/

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