電気ウナギ的○○

About Home

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

shinoda (2020年10月12日 13:09)
まあ、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 とかそんなに詳しいわけじゃないんで、もっとこんな簡単な方法が・・・みたいなものがあればご教示ください。>識者の方

電気ウナギ的○○

電気ウナギ的○○

About Back

コメント(0)

電気ウナギ的○○

電気ウナギ的○○

About Back

トラックバック(0)

トラックバックURL: https://blog.netandfield.com/mt/mt-tb.cgi/5726

電気ウナギ的○○

About This Site

電気ウナギ的○○
岩国在住。広島で働く超零細IT企業社長のいわゆる社長日記。
何か、酒と食い物のことばかり書いているようで・・・お察しのとおり、肥満体です:-)


2011/06/24
iPhone用サイト公開

Create with jQuery, jQTouch.


CLOSE