【发布时间】:2024-04-25 09:35:01
【问题描述】:
如果是周末或以下假期之一,我有一个方法应该返回 1:元旦、阵亡将士纪念日、独立日、劳动节、感恩节和圣诞节,否则返回 0。我选择使用 DateTime.DayOfYear 和 DateTime.IsLeapYear 的组合来实现代码,但我觉得这确实效率低下,而且还使得像阵亡将士纪念日(5 月的最后一个星期一!)这样的假期变得更加困难。我如何才能有效地实现我的目标,并且不对每年更改日期的假期进行硬编码?
这是我当前的实现:
private int IsItAHoliday(DateTime time)
{
// Assume it is not a weekend
int isWeekendOrHoliday = 0;
// TODO: Memorial Day, Labor Day, Thanksgiving
// Declare holidays
int christmasDayNonLeapYearIndex = 359;
int christmasDayLeapYearIndex = 360;
int newYearsDayIndex = 1;
int independenceDayNonLeapYearIndex = 185;
int independenceDayLeapYearIndex = 186;
// Find out if time falls on a weekend
if (time.DayOfWeek == DayOfWeek.Saturday || time.DayOfWeek == DayOfWeek.Sunday)
{
isWeekendOrHoliday = 1;
}
// Find out if time falls on a holiday
// Leap year
if (DateTime.IsLeapYear(time.Year))
{
if ((time.DayOfYear == christmasDayLeapYearIndex) || (time.DayOfYear == independenceDayLeapYearIndex) || (time.DayOfYear == newYearsDayIndex))
{
isWeekendOrHoliday = 1;
}
}
// Non-leap year
else if (!DateTime.IsLeapYear(time.Year))
{
if ((time.DayOfYear == christmasDayNonLeapYearIndex) || (time.DayOfYear == independenceDayNonLeapYearIndex) || (time.DayOfYear == newYearsDayIndex))
{
isWeekendOrHoliday = 1;
}
}
return isWeekendOrHoliday;
}
【问题讨论】:
标签: c# function datetime performance