言語が特定の日付の日付/日のメソッドを提供しているようです。興味のある人は、 Zeller の合同について読むことができます。
それは彼らがあなたに望んでいたことではないと思いますが、それから月の最初の日の曜日を見つけることができます. 考えてみると、指定された日の曜日を として見つけ、N
そのモジュロ 7 を取得できます。
ああ、それは N 番目の曜日 (日曜日のような) または月の N 番目の平日のようなものです! さて、私は例を見ます。
月の1日などの日付を作成できれば、違いがあるかもしれません..
それが曜日の N 番目の出現であり、どの日時データ型でもいじることができず、get day of week と get day of month の両方の機能にアクセスできることを考えると。日曜日はゼロですか?
1) まず、曜日は指定された曜日と一致する必要があります。
2) N は 1 以上 4 以下である必要があります。
3) 同じ n に対して、月の日付は n*7*dayOfWeek + 1 から n*7*dayOfWeek + 6 の範囲になります。
- 考えさせてください。日曜日が最初の場合.. 0*7*0+1 = 1 で、6 日目の土曜日は 0*7*0+6 になります。
get day of month 関数は 2 に違反してはならないため、上記の 1 と 3 で十分だと考えてください。
(* first try, this code sucks *)
function isNthGivenDayInMonth(date : dateTime;
dow : dayOfWeek;
N : integer) : boolean;
var B, A : integer (* on or before and after day of month *)
var Day : integer (* day of month *)
begin
B := (N-1)*7 + 1; A := (N-1)*7 + 6;
D := getDayOfMonth(date);
if (dow <> getDayOfWeek(date)
then return(false)
else return( (B <= Day) and (A >= Day) );
end; (* function *)
そこにバグがないことを願っています笑!
[編集: 土曜日は 7 日で、上限は(N-1)*7 + 7
.]
あなたのソリューションは 2 つの異なる週に一致するように見えますか? 日曜日には常にゼロを返すように見えますか? C# で疑似コードを作成する必要がありました..ショート サーキット && は私の if のようなものです..日曜日に始まる月の N = 1 の最初の試合を日曜日にするべきではありませんか?
d/ 7 == n
その結果、(either 0 or 1)/7 == 1
、それは正しくありません! あなたの||
キャッチ(n-1)
も、ロバートはそれを持っています。Robert Wagnerの答えに行きましょう!2行だけ、短いのがいい!(Day-1) mod 7
[edit: (Day-1) div 7
]を使用
すると、不要な変数と 2 行のセットアップがなくなります。
記録のために、8 月 31 日が日曜日または土曜日である場合のように、境界のケースなどについてこれをチェックする必要があります。
[編集: 週末のケースもチェックすべきでした。ごめん!]