假期C#的日期约定

时间:2014-02-26 16:17:26

标签: c#

我正在尝试使用c#查找工作日。我想知道是否有办法找到美国假期,或者我应该写一个函数来确定日期是否是假日?

public bool isHoliday(DateTime date)
{
//holiday input 
}

4 个答案:

答案 0 :(得分:3)

您可以使用此示例: http://www.codeproject.com/Articles/11666/Dynamic-Holiday-Date-Calculator

该链接提供的解决方案:

  

我们决定将所有规则存储起来是理想的   XML文件中的不同假日,然后写一个类   可以解释这些规则并计算每个规则的正确日期   假日。要做到这一点,我们必须将假期分成不同的   类似的计算类型。以下是   我们处理的不同类型的假期和样本XML   每个配置:

<Holiday name="Groundhog Day">
    <Month>2</Month>
    <Day>2</Day>
</Holiday>

<Holiday name="Tax Day">
    <WeekdayOnOrAfter>
        <Month>4</Month>
        <Day>15</Day>
    </WeekdayOnOrAfter>
</Holiday>

这里的代码太多了,但这可以解决你的问题。利用该代码并根据您的需求进行修改。

答案 1 :(得分:2)

这是一个非常原始的例子,说明如何使用绝对日期存储美国假期表。劳动节和哥伦布日需要一点想象力,因为它们是可变日期。

class VariableHoliday
{
    public string Name {get; set;}

    public bool IsOnDate(DateTime date)
    {
         //logic to detect the variable dates goes here!
    }
}

static readonly Dictionary<DateTime, string> m_Holidays = new Dictionary<DateTime,string>
{
    { new DateTime(1,1,1), "New Years Day" },
    { new DateTime(1,7,4), "Independence Day" },
    { new DateTime(1,7,4), "Independence Day" },
    /*FILL OUT ALL OF THE HOLIDAYS YOU WANT TO OBSERVE*/
};

static List<VariableHolidays> m_VariableHolidays = new List<VariableHolidays>();

public bool isHoliday(DateTime date)
{
    bool isHoliday = m_Holidays.HasKey(new DateTime(1, date.Month, date.Day));

    if(!isHoliday)
        m_VariableHolidays.Any(p => p.IsOnDate(date));
}

public string getHolidayName(DateTime date)
{
    if(m_Holidays.HasKey())
        return m_Holidays[new DateTime(1, date.Month, date.Day)];
    else
    {
        var holiday = m_VariableHolidays.FirstOrDefault(p => p.IsOnDate(date));
        if(holiday != null) return holiday.Name
    }

    throw new InvalidOperationException("Date is not a holiday");
}

答案 2 :(得分:0)

您可以使用DateTime.DayOfWeek来确定它是周末还是工作日,但是没有内置是确定它是否是公共假期,如果这就是您所要求的。

请参阅DateTime.DayOfWeek

答案 3 :(得分:0)

我的公司对所有公司假期使用SQL表,因此这将是一个简单的单一SELECT(或存储过程)。然后有人必须保持那张桌子。如果它只是你,那么硬编码将非常相同。

一个主要的替代方案是刮取列出公众假期的网站。我假设你只想要联邦假期,所以不包括情人节。根据您的应用程序使用它做什么,您可能需要能够脱离标准列表,这就是它所在的位置。

无论你这样做,我建议你根据来源检查你的方法,包括:

只是为了确保你有你想要的东西。