我正在尝试编写一个查询,返回在一天中某个小时内发生的日期加上持续时间。例如,在(晚上8点+8小时),小时和持续时间之后发生的任何DateTime
都是可变的。小时+持续时间可能在第二天。飙升:
[Test]
public void should_find_dates_between_beginhour_plus_duration()
{
var dates = new []
{
new DateTime(2017, 1, 3, 12,0,0),
new DateTime(2017, 1, 4, 21,0,0),
new DateTime(2017, 1, 5, 2,0,0)
};
var beginHour = 20; //8pm
var duration = 8; //hours
var results = dates.Where(x => x.Hour >= beginHour && x <= x.???? + duration);
//should contain the last 2 dates
foreach (var date in results)
{
Console.WriteLine(date);
}
}
答案 0 :(得分:2)
因此,冬季/夏季时间变化在这里并不重要,那么您可以在运行查询之前计算结束时间。过滤将很简单 - 您选择的日期比开始时间(晚上晚些时候)要大,或者小于结束时间(即早上早些时候):
var endHour = DateTime.Today.AddHours(beginHour + duration).Hour;
var results = dates.Where(x => beginHour < endHour
? (beginHour <= x.Hour && x.Hour <= endHour)
: (beginHour <= x.Hour || x.Hour <= endHour));