月の最終日を求めることって意外と多いと思います。今年はうるう年かを気にしながらコーディングしている人の想像がつきます。ここでは、VB.NET / C# で月の最終日を求めるサンプルを掲載しています。
スポンサーリンク
月の最終日を求める方法はいくつもあると思いますが、ここでは2つの方法を紹介します。いずれの場合も、DateTime 構造体を使用します。
- 翌月 1日の 1日前の日付を求める方法
- DateTime.DaysInMonth メソッドを使用する方法
VB.NET
'1.翌月1日の1日前を返す。結果的に当月の最終日(日数)がわかる Dim yyyymm As String = "2010/10" Dim d As DateTime If DateTime.TryParse(yyyymm + "/01", d) Then d = d.AddMonths(1).AddDays(-1) Else ' 何かエラー処理 End If 'd.Day = 31 '2.DateTime.DaysInMonth メソッドを使用する Dim mlength As Integer = DateTime.DaysInMonth(2010, 10) 'mlength = 31
C#
//1.翌月1日の1日前を返す。結果的に当月の最終日(日数)がわかる string yyyymm = "2010/10"; DateTime d ; if( DateTime.TryParse(yyyymm + "/01", out d)) { d = d.AddMonths(1).AddDays(-1); } else { // 何かエラー処理 } // d.Day = 31 // 2.DateTime.DaysInMonth メソッドを使用する int mlength = DateTime.DaysInMonth(2010,10); // mlength = 31
DateTime.AddMonths と DateTime.AddYears の仕様
例えば、DateTime 構造体に、 “2010年1月31日” の日付が格納されているとします。AddMonths(1) で結果は 2010年2月28日となります。逆に、2010年12月31日に対して、AddMonths(-1) とすると、2010年11月30日となります。 単純に月の増減だけで存在しない日付ができた場合、その月の最終日に丸められるようです。
2012年2月29日(うるう年) が格納されている DateTime 構造体に対して、AddYears(1) とすると、同じように “2013年2月28日” に丸められます。
参考