まず、休日の単一の一貫した定義が必要です。沢山あります。米国連邦政府の定義があり、NYSEの定義があり、一部の州でさえ独自の休日があります(たとえば、マサチューセッツ州の愛国者の日)。そしてもちろん、私は米国が世界で唯一の国ではないという事実を無視しました。したがって、この定義を定式化し、メソッドに体系化したとしましょう。
bool IsHoliday(this DateTime date) { // }
今、あなたは言うことができます:
int CountHolidaysBetween(DateTime start, DateTime end) {
int days = end.Day.Substract(start.Day).Days;
return Enumerable.Range(0, days + 1)
.Select(day => start.Day.AddDays(day))
.Count(d => d.IsHoliday());
}
または、それがあまりにも派手だと思う場合:
int CountHolidaysBetween(DateTime start, DateTime end) {
DateTime current = start.Day;
int count = 0;
while(current <= end.Day) {
if(current.IsHoliday()) { count++; }
current = current.AddDays(1);
}
return count;
}
ご覧のとおり、最も重要な部分は、休日の定義を決定し、それをメソッドに体系化することです。それは私たちがあなたのために決めることができるものではありません。あなたが米国にいるかどうか、政府機関であるかどうか、州固有の休日を守る必要があるかどうかなどはわかりません。