VB.NET で一ヶ月後の最終日付を取得するには

まあ、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 Then
    saisyu_flg = 1
End 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 とかそんなに詳しいわけじゃないんで、もっとこんな簡単な方法が・・・みたいなものがあればご教示ください。>識者の方

トラックバック(0)

このブログ記事を参照しているブログ一覧: VB.NET で一ヶ月後の最終日付を取得するには

このブログ記事に対するトラックバックURL: https://blog.netandfield.com/mt/mt-tb.cgi/5726

コメントする

このブログ記事について

このページは、shinodaが2020年10月12日 13:09に書いたブログ記事です。

ひとつ前のブログ記事は「.264 ファイルを、.mp4 ファイルに自動変換」です。

次のブログ記事は「彩龍はチャーハンよりもチャーシュー丼とあえて言おう(笑)」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。


月別 アーカイブ

電気ウナギ的○○ mobile ver.

携帯版「電気ウナギ的○○」はこちら