【问题标题】:How to add a number of days to a Date while skipping weekends and other holidays and start day is weekend or holiday如何在跳过周末和其他假期并且开始日是周末或假期时向日期添加天数
【发布时间】:2014-04-14 13:02:23
【问题描述】:

以下代码计算要添加的工作日数,如果结束日期在节假日/周末,则将日期移到下一天。
但此代码假设开始日期为不在周末/节假日。

如果开始日期是周末/节假日,我想要也可以使用的代码。

请注意此代码由 ElenaSofea 于 2013 年 6 月 17 日,但由于我无法对此发表评论,因此这是一个新问题。
参考:How to add a number of days to a Date while skipping weekends and other holidays

static DateTime CalculateFutureDate(DateTime fromDate, int numberofWorkDays,   
                                ICollection<DateTime> holidays)
{
    var futureDate = fromDate;
    for (var i = 0; i < numberofWorkDays; i++ )
    {
        if (futureDate.DayOfWeek == DayOfWeek.Saturday 
         || futureDate.DayOfWeek == DayOfWeek.Sunday
         || (holidays != null && holidays.Contains(futureDate)))
        {
            futureDate = futureDate.AddDays(1);
            numberofWorkDays++;
        }
        else
        {
            futureDate = futureDate.AddDays(1);
        }
    }
    while(futureDate.DayOfWeek == DayOfWeek.Saturday 
         || futureDate.DayOfWeek == DayOfWeek.Sunday
         || (holidays != null && holidays.Contains(futureDate)))
    {
        futureDate = futureDate.AddDays(1);
    }
    return futureDate;
}

【问题讨论】:

  • 你真的应该看看jollyday.sourceforge.net
  • 这不是 Java 问题。我将其重新标记为 C#,因为您复制的源代码来自带有 C# 标记的帖子。

标签: c# datetime


【解决方案1】:

尝试将日期作为输入传递,以便此方法验证检查是星期六还是星期日

public static boolean isValidateSundayorSaturday(String date) throws Exception {

        Calendar calendar = Calendar.getInstance();     
        if (date != null) {

            calendar.setTime(getDate(date,null));
            int day = calendar.get(Calendar.DAY_OF_WEEK);

            if (day == Calendar.SUNDAY || day == Calendar.SATURDAY) {
                return true;
            } 
        }
        return false;
    }

【讨论】:

  • 根据java代码库改变,而不是js @PaulRichter
【解决方案2】:

您必须提供所有排除的日期,因为即使在同一个国家/地区,它也因地区而异。

如果你想看代码here you go

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-03
    • 1970-01-01
    • 2018-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多