期間を求めるコード take2

なるとちゃんさんに、世界標準時を軸にやってみれば?って提案していただいたので、一度世界標準時に直して、結果を地域時間に戻すようにしてみました。

            DateTime CurUniversalTime = curdatetime.ToUniversalTime();
            //与えられた日時から184のひとの範囲を求める
            int youbi = (int)CurUniversalTime.DayOfWeek;
            int youbisa = 3 - youbi;  43
            if (youbisa == 0)
            {
                if (curdatetime > DateTime.Parse(CurUniversalTime.ToShortDateString() + " 0:00"))
                    youbisa += 7;
            }
            else if (youbisa < 0)
            {
                youbisa += 7;
            }
            DateTime EDateTime = DateTime.Parse(CurUniversalTime.AddDays(youbisa).ToShortDateString() + " 23:59");
            DateTime SDateTime = DateTime.Parse(EDateTime.AddDays(-6).ToShortDateString() + " 0:00");  -7→-6
            Console.WriteLine(string.Format("{0}〜{1}", SDateTime, EDateTime));

            SDateTime = SDateTime.ToLocalTime();
            EDateTime = EDateTime.ToLocalTime();
            Console.WriteLine(string.Format("{0}〜{1}",SDateTime,EDateTime));

結果
2011/08/11 0:00:00〜2011/08/17 23:59:00
2011/08/11 9:00:00〜2011/08/18 8:59:00

書いていて、気づいたけど、水曜日の処理で曜日=日付で切り替わるからいらないかなー
if (curdatetime > DateTime.Parse(CurUniversalTime.ToShortDateString() + " 0:00"))
youbisaが0未満なら1週間すればいいのか、うにゃー眠いせいでピンと来ないw
ちょっと机上デバッグしてきますw

ということで、ご飯たべつつ、机上デバッグしてきました。

- 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 - - -

有効期限開始日時の時点での有効期限

日本時間 世界標準時 曜日番号 曜日差 加算日数 184有効期限 有効期限JPN
8/11 9:00 8/11 0:00 4 -1 6 8/17 23:59 8/18 8:59
- 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 - - -

有効期限開始日時の次の日

日本時間 世界標準時 曜日番号 曜日差 加算日数 184有効期限 有効期限JPN
8/12 9:00 8/12 0:00 5 -2 5 8/17 23:59 8/18 8:59
- 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 - - -

有効期限開始日時の次の週になった初日

日本時間 世界標準時 曜日番号 曜日差 加算日数 184有効期限 有効期限JPN
8/14 9:00 8/14 0:00 0 3 3 8/17 23:59 8/18 8:59
- 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 - - -

有効期限終了日当日の期限前

日本時間 世界標準時 曜日番号 曜日差 加算日数 184有効期限 有効期限JPN
8/18 8:00 8/17 23:00 3 0 0 8/17 23:59 8/18 8:59
- 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 - - -

有効期限終了日当日の期限後(最初と一緒かにゃ?)

日本時間 世界標準時 曜日番号 曜日差 加算日数 184有効期限 有効期限JPN
8/18 9:01 8/18 0:01 4 -1 6 8/24 23:59 8/25 8:59
- 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 - - -

ということで、余計なコードを消したもの

            DateTime CurUniversalTime = curdatetime.ToUniversalTime();
            //与えられた日時から184のひとの範囲を求める
            int youbi = (int)CurUniversalTime.DayOfWeek;
            int youbisa = 3 - youbi;
            if (youbisa < 0)
            {
                youbisa += 7;
            }
            DateTime EDateTime = DateTime.Parse(CurUniversalTime.AddDays(youbisa).ToShortDateString() + " 23:59");
            DateTime SDateTime = DateTime.Parse(EDateTime.AddDays(-6).ToShortDateString() + " 0:00");  -7→-6
            Console.WriteLine(string.Format("{0}〜{1}", SDateTime, EDateTime));

            SDateTime = SDateTime.ToLocalTime();
            EDateTime = EDateTime.ToLocalTime();
            Console.WriteLine(string.Format("{0}〜{1}",SDateTime,EDateTime));