C# c语言中的日期计算#

C# c语言中的日期计算#,c#,datetime,C#,Datetime,在我的应用程序(c#)中,我需要将n天添加到今天的日期。我知道我可以使用DateTime.AddDays(n)方法,这个方法很好用。但在我的情况下,我只想添加工作日(或者只添加“周一”和“周五”或任何其他设置) 可能存在任何默认方法来计算此类逻辑 测试数据: 日期:今天(2014年6月24日)。 添加天数:10 天数类型:工作日(Mn Fr) 回答:2014年7月8日您可以使用LINQ: DayOfWeek[] weekEnd = { DayOfWeek.Saturday, DayOfWeek.

在我的应用程序(c#)中,我需要将
n
天添加到今天的日期。我知道我可以使用
DateTime.AddDays(n)
方法,这个方法很好用。但在我的情况下,我只想添加工作日(或者只添加“周一”和“周五”或任何其他设置)

可能存在任何默认方法来计算此类逻辑

测试数据:

日期:今天(2014年6月24日)。
添加天数:10
天数类型:工作日(Mn Fr)
回答:2014年7月8日

您可以使用LINQ:

DayOfWeek[] weekEnd = { DayOfWeek.Saturday, DayOfWeek.Sunday };
DateTime end = Enumerable.Range(0, int.MaxValue)
            .Select(i => DateTime.Today.AddDays(i))
            .Where(d => !weekEnd.Contains(d.DayOfWeek))
            .Take(10)
            .Last();

但是,我假设它返回07/07,因为它包括今天。我不知道这是否合意。如果您不想包括今天,请将
范围(0,int.MaxValue)
更改为
范围(1,int.MaxValue)

我会这样做:

    public static DateTime AddBusinessDays(this DateTime source, int daysToAdd, params DayOfWeek[] workdays)
    {
        if (daysToAdd <= 0)
            return source;
        var current = source;

        while (daysToAdd > 0)
        {
            current = current.AddDays(1);

            if (workdays.Contains(current.DayOfWeek))
                daysToAdd--;
        }

        return current;
    }
public static DateTime AddBusinessDays(此DateTime源,int daysToAdd,params DayOfWeek[]workdays)
{
如果(daystoadd0)
{
当前=当前添加天数(1);
if(工作日包含(当前工作日)
daysToAdd--;
}
回流;
}

我会创建一个天数的枚举,然后当您在要添加的天数上迭代时,根据您的枚举检查它没有内置方法。关于如何计算工作日,有几种答案。@DStanley,谢谢您的评论,但是自定义天数集(Fr Sun)呢?也许问题没有重复?你问是否有“默认方法”-答案是否-可能有第三方库,或者你可以滚动你自己的有几个答案的库。