性格悪い人が優勝

以下のコードは直前の日曜日の日付を取得してくるのですが、
どういった理論で取得されているのかが疑問です。

DateTime.Now.AddDays(
-1 * (7 + (DateTime.Now.DayOfWeek - DayOfWeek.Sunday)) Mod 7
).Date.Day

また、これを"直前"ではなく、"直後"の日曜日の日を取得するように
、変えることもできるのでしょうか。

すみませんが、よろしくお願いします。

A 回答 (2件)

① DateTime.Now.AddDays(X).Date.Day


→「今日の日付のX日後」を算出。

② いま、Xの中身は
-1 * (7 + (DateTime.Now.DayOfWeek - DayOfWeek.Sunday)) Mod 7
なのですが、
DateTime.Now.DayOfWeek
→ 今日の曜日を返す
DayOfWeek.Sunday
→ 日曜日
で、「DayOfWeek 列挙型」は
月曜日=1、火曜日=2、…、日曜日=7に対応。
例えば、今日が火曜日なら
DateTime.Now.DayOfWeek = 2
DayOfWeek.Sunday = 7で、
「後 ー 前」で何日離れてるかが分かる。
DateTime.Now.DayOfWeek
- DayOfWeek.Sunday = 2-7= -5

③ ②の”-5“は「直後の日曜日との差」になっており、「“直前の”日曜日との差」が知りたいので、さらに7を足して、(-5)+7=2

④ X mod 7 は「X を7で割った余り」
を意味する。2 mod 7 = 2。
※ 「今日の日付が日曜日」だった場合に
“7”ではなく“0”を返したいための調整。

⑤ さらに、(-1)をかけることで
「今日の日付からX日引く」を実現。

今日が火曜日なら、「2日前の日付」を返す。
DateTime.Now.AddDays(-2).Date.Day

今日が日曜日なら、「0日前の日付」
→今日の日付を返す
DateTime.Now.AddDays(0).Date.Day
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます!
なるほど、納得できました!
詳しいご説明ありがとうございました!

お礼日時:2021/03/30 09:04

せめて「どの言語なのか」くらいは書いてもらえないだろうか.

    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!