まあ、DateTime 型のオブジェクトには AddMonths メソッドがあるので、
Dim hoge_today As DateTime = "2020/03/23"Dim hoge_addmon As DateTime = hoge_today.AddMonths(1)
とすれば、hoge_addmon には 2020/04/23 がセットされる。
一応、自動で月の最終日の判断はするので、
Dim hoge_today As DateTime = "2020/03/31"Dim hoge_addmon As DateTime = hoge_today.AddMonths(1)
であれば、hoge_addmon には 2020/04/30 がセットされる。
決して、2020/05/01 であったり、ましてや 2020/04/31 になってしまうわけではない。
なんか、ネット上の情報を見ていると、「.NET って、ちゃんと最終日の判断してるやん!!」「3/31の一ヶ月後が 4/30 になってて感動!」みたいな記事が多い。
いや、それは当たり前なんちゃう?(^^; そんな感動することか!?と思うのだが、VB.NET なんかは、何もプログラミングのことを知らずに入社したプログラマが最初に使う言語ということも多いだろうから、こういう感動をする人も多いのかなあ・・・とか思ったり。
ただこの「自動で最終日をセットしてくれて素敵」は、基準となる年月日が「31日まである月」のみの話である。
Dim hoge_today As DateTime = "2020/02/29"Dim hoge_addmon As DateTime = hoge_today.AddMonths(1)
の場合、hoge_addmon には 2020/03/29 がセットされる。最終日でもなんでもない。
Dim hoge_today As DateTime = "2020/02/29"Dim hoge_addmon As DateTime = hoge_today.AddMonths(-1)
なら、2020/01/29 がセットされる。やはり 1月の最終日ではない。
結局、翌月の最終日を求めようと思えば、単純に AddMonths を使うのではなく、
Dim old_mm As String = hoge_today.ToString("MM")If hoge_today.AddDays(1).ToString("MM") <> old_mm Thensaisyu_flg = 1End If
みたいに最終日かどうかをチェックして、最終日だったときは、
Dim days As Integer = DateTime.DaysInMonth(hoge_today.AddMonths(1).Year, theDay.AddMonths(1).Month)Dim hoge_addmon As DateTime = New DateTime(hoge_today.AddMonths(1).Year, hoge_today.AddMonths(1).Month, days)
みたいにしないとダメ?
すんまへん。VB.NET とかそんなに詳しいわけじゃないんで、もっとこんな簡単な方法が・・・みたいなものがあればご教示ください。>識者の方
コメントする