一日後の日付を表示するとき、次の日が存在しない場合、次月の1日を表示するようにしたい。 への返答
投稿で使用できる特殊コードの説明。(別タブで開きます。)
以下の返答は逆順(新しい順)に並んでいます。
投稿者 魔界の仮面弁士  (社会人)
投稿日時
2010/12/18 23:15:28
コードから察するに、VB2008 もしくは VB2010 をお使いのようですね。
> 曜日を一日後のもので表示したいのですが
Today の曜日の一つ後を算出するのではなく、
「Today の一日後の日付」の曜日を得た方が早いと思いますよ。
一日後の日付を得る方法は、既に shu さんが回答しておられますね。
> Dim Tdy_Wd = Today.Dayofweek
> If Tdy_Wd = 6 Then
番号ではなく、DayOfWeek.Saturday 等で管理されるべきです。
> 'Tdy_Wdの曜日番号から曜日を割り出す。
ここが違います。
WeekdayName 関数に渡す曜日番号というものは、Today.DayOfWeek で得るのではなく、
Weekday 関数を使って得る必要があります。
Today.DayOfWeek から返されるのは、曜日そのものを表す値であり、具体的には
一方、Weekday や WeekdayName で使う値は、1~7 を取ります。
しかもこの値は、曜日そのものを示しているのではなく、週内の第何曜日かを表す値です。
1~7 がどの曜日に割り当てられているのかは、関数の引数によって指定する事になります。
WeekdayName の場合は、1番に相当する曜日を第3引数で指定する事になっており、たとえば
「WeekdayName(1, , FirstDayOfWeek.Sunday)」ならば『日曜日』
「WeekdayName(2, , FirstDayOfWeek.Sunday)」ならば『月曜日』
「WeekdayName(1, , FirstDayOfWeek.Monday)」ならば『月曜日』
といった具合です。Weekday 関数の場合は第2引数です。
この引数を指定しなかった場合は、FirstDayOfWeek.System が指定された物として扱われ、
OS の地域設定に依存した結果を返します。
> 曜日を一日後のもので表示したいのですが
Today の曜日の一つ後を算出するのではなく、
「Today の一日後の日付」の曜日を得た方が早いと思いますよ。
一日後の日付を得る方法は、既に shu さんが回答しておられますね。
> Dim Tdy_Wd = Today.Dayofweek
> If Tdy_Wd = 6 Then
番号ではなく、DayOfWeek.Saturday 等で管理されるべきです。
> 'Tdy_Wdの曜日番号から曜日を割り出す。
ここが違います。
WeekdayName 関数に渡す曜日番号というものは、Today.DayOfWeek で得るのではなく、
Weekday 関数を使って得る必要があります。
Today.DayOfWeek から返されるのは、曜日そのものを表す値であり、具体的には
DayOfWeek.Sunday ' = 0
DayOfWeek.Monday ' = 1
' :
DayOfWeek.Saturday '= 6
です。一方、Weekday や WeekdayName で使う値は、1~7 を取ります。
しかもこの値は、曜日そのものを示しているのではなく、週内の第何曜日かを表す値です。
1~7 がどの曜日に割り当てられているのかは、関数の引数によって指定する事になります。
WeekdayName の場合は、1番に相当する曜日を第3引数で指定する事になっており、たとえば
「WeekdayName(1, , FirstDayOfWeek.Sunday)」ならば『日曜日』
「WeekdayName(2, , FirstDayOfWeek.Sunday)」ならば『月曜日』
「WeekdayName(1, , FirstDayOfWeek.Monday)」ならば『月曜日』
といった具合です。Weekday 関数の場合は第2引数です。
この引数を指定しなかった場合は、FirstDayOfWeek.System が指定された物として扱われ、
OS の地域設定に依存した結果を返します。
投稿者 うそこ  (社会人)
投稿日時
2010/12/18 22:35:33
上の問題は解決しました。
曜日を一日後のもので表示したいのですが以下のようにするとエラーを吐きます。
曜日を一日後のもので表示したいのですが以下のようにするとエラーを吐きます。
Dim Tdy_Wd = Today.Dayofweek '今日の曜日番号を取得
If Tdy_Wd = 6 Then '今日が土曜日であれば日曜日にするために0を代入。
Tdy_Wd = 0
Else
Tdy_Wd = Tdy_Wd + 1 '違えば普通にプラス1を行い、次の曜日番号を代入。
End If
Dim Next_Wd = WeekdayName(Tdy_Wd) 'Tdy_Wdの曜日番号から曜日を割り出す。
MsgBox(Next_Wd) 'Next_WdをMSGBOX表示する。
投稿者 うそこ  (社会人)
投稿日時
2010/12/18 22:01:13
本日の日付を代入しようと
としたのですがLong型でないとされ失敗します。
どうすればいいでしょうか。
Dim dtTmp As Date = New Date(Today)
としたのですがLong型でないとされ失敗します。
どうすればいいでしょうか。
投稿者 shu  (社会人)
投稿日時
2010/12/16 21:59:50
Dim dtTmp as date
dtTmp = new Date(2010, 12, 15)
Console.Writeline(dtTmp.ToString("yyyy/MM/dd"))
dtTmp = dtTmp.AddDays(1)
Console.Writeline(dtTmp.ToString("yyyy/MM/dd"))
dtTmp = new Date(2010, 12, 31)
Console.Writeline(dtTmp.ToString("yyyy/MM/dd"))
dtTmp = dtTmp.AddDays(1)
Console.Writeline(dtTmp.ToString("yyyy/MM/dd"))
こんな感じですか?
dtTmp = new Date(2010, 12, 15)
Console.Writeline(dtTmp.ToString("yyyy/MM/dd"))
dtTmp = dtTmp.AddDays(1)
Console.Writeline(dtTmp.ToString("yyyy/MM/dd"))
dtTmp = new Date(2010, 12, 31)
Console.Writeline(dtTmp.ToString("yyyy/MM/dd"))
dtTmp = dtTmp.AddDays(1)
Console.Writeline(dtTmp.ToString("yyyy/MM/dd"))
こんな感じですか?
投稿者 うそこ  (社会人)
投稿日時
2010/12/16 21:29:54
一日後の日付を表示するプログラムを作りました。
このプログラムは日付の「日」部分にプラス1をするだけなので存在しない日にち、例えば32日なども出力してしまいます。
これを改善したいのですがどうすればいいのでしょうか?
このプログラムは日付の「日」部分にプラス1をするだけなので存在しない日にち、例えば32日なども出力してしまいます。
これを改善したいのですがどうすればいいのでしょうか?
Dim dt As Date = Today
MsgBox(dt.ToString("ddd"))
MsgBox(dt.ToString("dddd"))
のように、日付型の ToString メソッドや、String.Format メソッドを用いる手法もあります。
こちらの方法では、引数に特定のカルチャを指定することで、
他の言語(英語、中国語、ドイツ語など)における曜日名を得ることも可能です。
http://msdn.microsoft.com/ja-jp/library/bb762911.aspx