1

2 つの日付の間の平日の時間数を取得するにはどうすればよいですか? (営業日の計算はたくさんありますが、平日の時間帯にはあまりないようです - 営業時間や営業時間ではなく、週末ではない時間帯だけです)。

これは私の刺し傷です - より良い方法はありますか?

void Main()
{
    // Works
    DateTime start = new DateTime(2013,6,15,0,0,0); // Saturday
    DateTime end = new DateTime(2013,6,17,10,0,0);  // Monday   

    // Result = 10 (OK)
    GetBusinessHours(start, end).Dump();        

    // Bugs
    start = new DateTime(2013,6,14,0,0,0); // Friday
    end = new DateTime(2013,6,15,0,0,0); // Saturday

    // Result = 0 (Bug) - should be 24
    GetBusinessHours(start, end).Dump();        
}

public double GetBusinessHours(DateTime start, DateTime end)
{
    double result = (end - start).TotalHours;

    int weekendDays = Enumerable.Range(0, 1 + end.Subtract(start).Days).Select(offset => start.AddDays(offset)).Count(d => d.DayOfWeek == DayOfWeek.Sunday || d.DayOfWeek == DayOfWeek.Saturday);       

    double weekendDeltaHours = 0;
    if (start.DayOfWeek == DayOfWeek.Saturday ||
        start.DayOfWeek == DayOfWeek.Sunday)
    {           
        weekendDays--;
        weekendDeltaHours = start.Date.AddDays(1).Subtract(start).TotalHours;
    }
    else if (end.DayOfWeek == DayOfWeek.Saturday ||
            end.DayOfWeek == DayOfWeek.Sunday)
    {
        weekendDeltaHours = (end - end.Date).TotalHours;
    }

    result = result - (weekendDays * 24) - weekendDeltaHours;           
    return result;
}

( Enumerable.Range トリックのAniへの小道具)。

4

1 に答える 1