Determine the difference between two DateTimes, only counting opening hours

前端 未结 6 2121
梦毁少年i
梦毁少年i 2020-12-03 07:36

For our support software in C#, I need to determine the time span between two DateTimes, but I only want opening hours counted (i.e. weekdays from 09:00 to 17:00).

S

6条回答
  •  失恋的感觉
    2020-12-03 08:35

    Use LINQ:

    DateTime dt1 = new DateTime(2010, 10, 1, 16, 0, 0);
    DateTime dt2 = new DateTime(2010, 10, 2, 10, 0, 0);
    
    int hours = Enumerable.Range(1, (dt2 - dt1).Hours)
                     .Where(h =>
                        {
                            var dt = dt1.AddHours(h);
                            return dt.DayOfWeek != DayOfWeek.Saturday
                                   && dt.DayOfWeek != DayOfWeek.Sunday
                                   && dt.Hour >= 9 && dt.Hour <= 17;
                        }).Count();
    

    Here I assume all Minute and Second are zero. Otherwise (dt2 - dt1).Hours will give unexpected value.

提交回复
热议问题