.NET TIPS

n日後、nカ月後、n年後の日付を求めるには?[C#、VB]

デジタルアドバンテージ 遠藤 孝信
2007/07/05

 .NET Frameworkでは、特定の日付はDateTime構造体(System名前空間)のインスタンスとして表すことができるが、その日付から、指定した日数、月数、年数が経過したときの日付はDateTime構造体の以下の3つのメソッドで求めることができる。

  • n日後の日付 : AddDays(n)
  • nカ月後の日付 : AddMonths(n)
  • n年後の日付 : AddYears(n)

 これらのメソッドは日付に対して日、月、年の加算を行うが、減算を行うためのメソッドは用意されていない。このため、n日前、nカ月前、n年前の日付を求めるには、これらのメソッドのパラメータで負の数を指定して行う。

 以下に、これらのメソッドを利用したサンプル・プログラムを示す。

// adddays.cs

using System;

class AddDaysMonthsYears {
  static void Main() {

    DateTime theday = new DateTime(2007, 12, 31);
    Console.WriteLine(theday); // 出力:2007/12/31 0:00:00

    for (int n = 1; n <= 3; n++) {
      DateTime newday = theday.AddDays(n);
      Console.WriteLine("{0}日後 {1}", n, newday);
    }
    // 出力:
    // 1日後 2008/01/01 0:00:00
    // 2日後 2008/01/02 0:00:00
    // 3日後 2008/01/03 0:00:00

    for (int n = 1; n <= 3; n++) {
      DateTime newday = theday.AddDays(-n);
      Console.WriteLine("{0}日前 {1}", n, newday);
    }
    // 出力:
    // 1日前 2007/12/30 0:00:00
    // 2日前 2007/12/29 0:00:00
    // 3日前 2007/12/28 0:00:00

    for (int n = 1; n <= 3; n++) {
      DateTime newday = theday.AddMonths(n);
      Console.WriteLine("{0}カ月後 {1}", n, newday);
    }
    // 出力:
    // 1カ月後 2008/01/31 0:00:00
    // 2カ月後 2008/02/29 0:00:00
    // 3カ月後 2008/03/31 0:00:00

    for (int n = 1; n <= 3; n++) {
      DateTime newday = theday.AddMonths(-n);
      Console.WriteLine("{0}カ月前 {1}", n, newday);
    }
    // 出力:
    // 1カ月前 2007/11/30 0:00:00
    // 2カ月前 2007/10/31 0:00:00
    // 3カ月前 2007/09/30 0:00:00

    for (int n = 1; n <= 3; n++) {
      DateTime newday = theday.AddYears(n);
      Console.WriteLine("{0}年後 {1}", n, newday);
    }
    // 出力:
    // 1年後 2008/12/31 0:00:00
    // 2年後 2009/12/31 0:00:00
    // 3年後 2010/12/31 0:00:00

    for (int n = 1; n <= 3; n++) {
      DateTime newday = theday.AddYears(-n);
      Console.WriteLine("{0}年前 {1}", n, newday);
    }
    // 出力:
    // 1年前 2006/12/31 0:00:00
    // 2年前 2005/12/31 0:00:00
    // 3年前 2004/12/31 0:00:00
  }
}

// コンパイル方法:csc adddays.cs
特定の日付に日、月、年の加算を行うC#のサンプル・プログラム(adddays.cs)

' adddays.vb

Imports System

Class AddDaysMonthsYears
  Shared Sub Main()

    Dim theday As New DateTime(2007, 12, 31)
    Console.WriteLine(theday) ' 出力:2007/12/31 0:00:00

    For n As Integer = 1 To 3
      Dim newday As DateTime = theday.AddDays(n)
      Console.WriteLine("{0}日後 {1}", n, newday)
    Next
    ' 出力:
    ' 1日後 2008/01/01 0:00:00
    ' 2日後 2008/01/02 0:00:00
    ' 3日後 2008/01/03 0:00:00

    For n As Integer = 1 To 3
      Dim newday As DateTime = theday.AddDays(-n)
      Console.WriteLine("{0}日前 {1}", n, newday)
    Next
    ' 出力:
    ' 1日前 2007/12/30 0:00:00
    ' 2日前 2007/12/29 0:00:00
    ' 3日前 2007/12/28 0:00:00

    For n As Integer = 1 To 3
      Dim newday As DateTime = theday.AddMonths(n)
      Console.WriteLine("{0}カ月後 {1}", n, newday)
    Next
    ' 出力:
    ' 1カ月後 2008/01/31 0:00:00
    ' 2カ月後 2008/02/29 0:00:00
    ' 3カ月後 2008/03/31 0:00:00

    For n As Integer = 1 To 3
      Dim newday As DateTime = theday.AddMonths(-n)
      Console.WriteLine("{0}カ月前 {1}", n, newday)
    Next
    ' 出力:
    ' 1カ月前 2007/11/30 0:00:00
    ' 2カ月前 2007/10/31 0:00:00
    ' 3カ月前 2007/09/30 0:00:00

    For n As Integer = 1 To 3
      Dim newday As DateTime = theday.AddYears(n)
      Console.WriteLine("{0}年後 {1}", n, newday)
    Next
    ' 出力:
    ' 1年後 2008/12/31 0:00:00
    ' 2年後 2009/12/31 0:00:00
    ' 3年後 2010/12/31 0:00:00

    For n As Integer = 1 To 3
      Dim newday As DateTime = theday.AddYears(-n)
      Console.WriteLine("{0}年前 {1}", n, newday)
    Next
    ' 出力:
    ' 1年前 2006/12/31 0:00:00
    ' 2年前 2005/12/31 0:00:00
    ' 3年前 2004/12/31 0:00:00
  End Sub
End Class

' コンパイル方法:vbc adddays.vb
特定の日付に日、月、年の加算を行うVBのサンプル・プログラム(adddays.vb)

 ここで少し注意すべきは、「2007/12/31」の2カ月後が「2008/02/29」、1カ月前が「2007/11/30」といったように、「日」の部分がずれる点だ。この結果からも分かるように、AddMonthsメソッドは、nカ月を加算した月に、該当する日付が含まれていない場合にはその月の月末の日付を返す。End of Article

カテゴリ:クラス・ライブラリ 処理対象:日付と時刻
使用ライブラリ:DateTime構造体(System名前空間)

この記事と関連性の高い別の.NET TIPS
指定した月から特定の曜日の日付を取得するには?
週の始まりの日付を求めるには?
カレンダー・コントロール(MonthCalendarコントロール)で複数月を表示するには?
[ASP.NET]Calendarコントロールのセルに任意のデータを埋め込むには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」

TechTargetジャパン

Insider.NET フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ

- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH