1年の日付(日ごとに繰り返す)で実行されるC#コードを作成していて、その月の第3月曜日に何か特別なことをしたい場合、どうすればこれを実現できますか?
言い換えれば、現在の月曜日が月のどの月曜日であるかを見つけるための最良の方法は何ですか?
public bool IsThirdMondayOfMonth(DateTime dt)
{
if(dt.DayOfWeek == DayOfWeek.Monday && dt.Day > 14 && dt.Day <= 21)
{
return true;
}
return false;
}
あなたの「言い換えれば」は、あなたが最初に説明した問題を実際に言い換えているとは思わないので、両方に答えます。
これは、特定の年の特定の月の特定の曜日のn番目の出現を判別する非常に単純な方法です。
public static DateTime DayOccurrence(int year, int month, DayOfWeek day,
int occurrenceNumber)
{
DateTime start = new DateTime(year, month, 1);
DateTime first = start.AddDays((7 - ((int)start.DayOfWeek - (int)day)) % 7);
return first.AddDays(7 * (occurrenceNumber - 1));
}
日付が月のどの月曜日(または他の日)であるかを判断するのははるかに簡単です。ちょうどその月の日の天井を取る/7:
public static int DayOccurrence(DateTime date)
{
return (int)Math.Ceiling(date.Day / 7.0);
}
15日から21日までの月曜日を検索します。
やりたいことを実行するための日付操作ライブラリがあるかどうかはわかりませんが、独自の関数を非常に簡単に作成できます。
using System;
class Program {
static void Main(string[] args) {
int year = 2010;
int month = 05;
DateTime thirdMonday = ThirdMonday(year, month);
}
private static DateTime ThirdMonday(int year, int month) {
for (int day = 1; day <= DateTime.DaysInMonth(year, month); ++day) {
DateTime dt = new DateTime(year, month, day);
if (dt.DayOfWeek == DayOfWeek.Monday) {
return dt.AddDays(14);
}
}
// this should never happen
throw new Exception();
}
}