[ VB.NET / C# ] 月の最終日(月の日数)を求める ( DateTime.DaysInMonth )

Pocket

月の最終日を求めることって意外と多いと思います。今年はうるう年かを気にしながらコーディングしている人の想像がつきます。ここでは、VB.NET / C# で月の最終日を求めるサンプルを掲載しています。

スポンサーリンク

月の最終日を求める方法はいくつもあると思いますが、ここでは2つの方法を紹介します。いずれの場合も、DateTime 構造体を使用します。

  1. 翌月 1日の 1日前の日付を求める方法
  2. 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日” に丸められます。

参考

 

スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *