C# 检查当前日期是该月的 1 日、2 日还是 3 日,忽略周末和附加 List<DateTime>

标签 c# datetime

我需要检查是否 DateTime.Now是在每个月的前 3 个工作日(周一至周五)。我还需要提供一个 List<DateTime>有国定假日,应相应处理。

如果 DateTime.Now 是星期六并且是该月的 1 号,则前 3 个工作日是星期一、星期二、星期三(该月的 3、4、5)。

    public bool IsBusinessDay()
    {
        DateTime now = DateTime.Now;

        DateTime fbd = new DateTime();
        DateTime sbd = new DateTime();
        DateTime tbd = new DateTime();


        DateTime fm = new DateTime(now.Year, now.Month, 1);
        DateTime sm = new DateTime(now.Year, now.Month, 2);
        DateTime tm = new DateTime(now.Year, now.Month, 3);

        // first business day

        if (fm.DayOfWeek == DayOfWeek.Sunday)
        {
            fbd = fm.AddDays(1);
        }
        else if (fm.DayOfWeek == DayOfWeek.Saturday)
        {
            fbd = fm.AddDays(2);
        }
        else
        {
            fbd = fm;
        }

        //second business day

        if (sm.DayOfWeek == DayOfWeek.Sunday)
        {
            sbd = sm.AddDays(1);
        }
        else if (sm.DayOfWeek == DayOfWeek.Saturday)
        {
            sbd = sm.AddDays(2);
        }
        else
        {
            sbd = sm;
        }

        //third business day

        if (tm.DayOfWeek == DayOfWeek.Sunday)
        {
            tbd = tm.AddDays(1);
        }
        else if (tm.DayOfWeek == DayOfWeek.Saturday)
        {
            tbd = tm.AddDays(2);
        }
        else
        {
            tbd = tm;
        }

        if (now == fdb || now == sbd || now == tbd)
        {
           return true;
        }

     return false;
    }

这是一个好方法吗?如何添加 List<DateTime> with holidays 并检查当前日期是否不是假期?

我有一种感觉,我想多了,而且想得不好。我不知道为什么,但同样的感觉告诉我有更简单的方法。

最佳答案

这应该做你想做的。您必须提供一组假期。

public static bool IsFirstThreeBusinessDays(DateTime date, HashSet<DateTime> holidays)
{
    DateTime dt = new DateTime(date.Year, date.Month, 1);
    int businessDaysSeen = 0;

    while (businessDaysSeen < 3)
    {
        if (dt.DayOfWeek != DayOfWeek.Saturday && 
            dt.DayOfWeek != DayOfWeek.Sunday && 
            !holidays.Contains(dt))
        {
            if (dt == date.Date)
            {
                return true;
            }

            businessDaysSeen++;
        }

        dt = dt.AddDays(1);
    }

    return false;
}

关于C# 检查当前日期是该月的 1 日、2 日还是 3 日,忽略周末和附加 List<DateTime>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32318405/

相关文章:

c# - 如何创建具有 n 个字节的数组?

c# - session 返回空

c# - 允许鼠标消息的子集通过 WPF 中的控件

c# - 如何使用 Open Xml 2.5 SDK 以只读方式创建(导出)excel 文件

c# - Web API 2 在无效日期时间上抛出异常

c# - TabPage 作为用户控件?

c# - 2017 年 3 月 1 日的 DateTime.Parse 问题

php - 如何在laravel中添加新的碳功能以与碳日期一起使用?

android - Android 中的 Json DateTime 解析

delphi - 如何将字符串转换为日期时间?