LINQ 日期小时与持续时间之间的时间



我正在尝试编写一个查询,该查询返回一天中某个小时内发生的日期加上持续时间。例如,在(8PM + 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);
    }
}

因此,冬季/夏季时移在这里并不重要,那么您可以在运行查询之前计算结束时间。过滤很简单 - 您选择的日期的小时数大于开始时间(晚上晚些时候(或小于结束时间(即早上早些时候(:

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));

最新更新