日付関係の関数

昨日のエントリで曜日とか祝日の判定処理を作ってる時に気がついたのでメモ。

日付関係の判定処理で似たような名前の微妙に処理が違う関数がある模様。

NthDayOfWeekWeekOfTheMonth

NthDayOfWeekは引数で渡した日が月で何番目の曜日かを返して、WeekOfTheMonthは月で何番目の週かを返します。但しWeekOfTheMonthの週は月の初めの週が4日以上ないと駄目という制限があるようで、たまに異なる結果になります。
例えば、2011/4/15という日付の場合、NthDayOfWeekは月で3番目の金曜と言うことで3が返ってきますが、WeekOfTheMonthの場合は、1日の週は2日しか無い為、最初の週は3日の週になるので2週目という事で2が返ってきます。

DayOfWeekDayOfTheWeek

共に曜日を調べる関数なんですが、DayOfWeekは1が日曜。DayOfTheWeekは1が月曜となってます。
曜日定数のDayMondayとかはDayOfTheWeekで返ってくる値の方で使わないと曜日がずれちゃいます。逆にFormatSettings.ShortDayNamesLongDayNamesはDayOfWeekの値を使わないと駄目ぽいですね。