C# - Duration between two DateTimes in minutes

后端 未结 9 1066
醉话见心
醉话见心 2020-12-16 11:58

I need to determine duration between two DateTimes in minutes.

However, there is a slight twist:

  • exclude weekends
  • only count minutes which a
9条回答
  •  遥遥无期
    2020-12-16 12:25

    Try the following DiffRange function.

    public static DateTime DayStart(DateTime date)
    {
        return date.Date.AddHours(7);
    }
    
    public static DateTime DayEnd(DateTime date)
    {
        return date.Date.AddHours(19);
    }
    
    public static TimeSpan DiffSingleDay(DateTime start, DateTime end)
    {
        if ( start.Date != end.Date ) {
            throw new ArgumentException();
        }
    
        if (start.DayOfWeek == DayOfWeek.Saturday || start.DayOfWeek == DayOfWeek.Sunday )
        {
            return TimeSpan.Zero;
        }
    
        start = start >= DayStart(start) ? start : DayStart(start);
        end = end <= DayEnd(end) ? end : DayEnd(end);
        return end - start;
    }
    
    public static TimeSpan DiffRange(DateTime start, DateTime end)
    {
        if (start.Date == end.Date)
        {
            return DiffSingleDay(start, end);
        }
    
        var firstDay = DiffSingleDay(start, DayEnd(start));
        var lastDay = DiffSingleDay(DayStart(end), end);
    
        var middle = TimeSpan.Zero;
        var current = start.AddDays(1);
        while (current.Date != end.Date)
        {
            middle = middle + DiffSingleDay(current.Date, DayEnd(current.Date));
            current = current.AddDays(1);
        }
    
        return firstDay + lastDay + middle;
    }
    

提交回复
热议问题