我正在尝试使用c#查找工作日。我想知道是否有办法找到美国假期,或者我应该写一个函数来确定日期是否是假日?
public bool isHoliday(DateTime date)
{
//holiday input
}
答案 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来确定它是周末还是工作日,但是没有内置是确定它是否是公共假期,如果这就是您所要求的。
答案 3 :(得分:0)
我的公司对所有公司假期使用SQL表,因此这将是一个简单的单一SELECT(或存储过程)。然后有人必须保持那张桌子。如果它只是你,那么硬编码将非常相同。
一个主要的替代方案是刮取列出公众假期的网站。我假设你只想要联邦假期,所以不包括情人节。根据您的应用程序使用它做什么,您可能需要能够脱离标准列表,这就是它所在的位置。
无论你这样做,我建议你根据来源检查你的方法,包括:
只是为了确保你有你想要的东西。