なるとちゃんさんに、世界標準時を軸にやってみれば?って提案していただいたので、一度世界標準時に直して、結果を地域時間に戻すようにしてみました。
DateTime CurUniversalTime = curdatetime.ToUniversalTime();
int youbi = (int)CurUniversalTime.DayOfWeek;
int youbisa = 3 - youbi; 4→3
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();
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));