如何从DateTime中减去一些工作日(不是周六或周日)?

时间:2011-01-06 13:36:31

标签: c#

如何从DateTime中减去多个工作日(不是周六或周日)?

方法签名应为:

void SubtractBusinessDays(ref DateTime dt,int BusinessDaysToSubtract)

由于

2 个答案:

答案 0 :(得分:2)

这是您可以使用的扩展方法。随意将其重构为一种简单的方法。

/// <summary>
/// Adds weekdays to date
/// </summary>
/// <param name="value">DateTime to add to</param>
/// <param name="weekdays">Number of weekdays to add</param>
/// <returns>DateTime</returns>
public static DateTime AddWeekdays(this DateTime value, int weekdays)
{
    int direction = Math.Sign(weekdays);
    int initialDayOfWeek = Convert.ToInt32(value.DayOfWeek);

    //---------------------------------------------------------------------------
    // if the day is a weekend, shift to the next weekday before calculating
    if ((value.DayOfWeek == DayOfWeek.Sunday && direction < 0)
        || (value.DayOfWeek == DayOfWeek.Saturday && direction > 0))
    {
        value = value.AddDays(direction * 2);
        weekdays += (direction * -1); // adjust days to add by one
    }
    else if ((value.DayOfWeek == DayOfWeek.Sunday && direction > 0)
        || (value.DayOfWeek == DayOfWeek.Saturday && direction < 0))
    {
        value = value.AddDays(direction);
        weekdays += (direction * -1); // adjust days to add by one
    }
    //---------------------------------------------------------------------------

    int weeksBase = Math.Abs(weekdays / 5);
    int addDays = Math.Abs(weekdays % 5);

    int totalDays = (weeksBase * 7) + addDays;
    DateTime result = value.AddDays(totalDays * direction);

    //---------------------------------------------------------------------------
    // if the result is a weekend, shift to the next weekday
    if ((result.DayOfWeek == DayOfWeek.Sunday && direction > 0)
        || (result.DayOfWeek == DayOfWeek.Saturday && direction < 0))
    {
        result = result.AddDays(direction);
    }
    else if ((result.DayOfWeek == DayOfWeek.Sunday && direction < 0)
        || (result.DayOfWeek == DayOfWeek.Saturday && direction > 0))
    {
        result = result.AddDays(direction * 2);
    }
    //---------------------------------------------------------------------------

    return result;
}

答案 1 :(得分:0)

你能不能只获得天数,然后是mod 7,并从原始天数中减去该值* 2,如果当天是星期六或星期日,则减去1或2?