LINQ DateTimes持续时间的小时数

时间:2017-06-28 22:10:42

标签: c# linq

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

1 个答案:

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