.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
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
adddays.vbのダウンロード
ここで少し注意すべきは、「2007/12/31」の2カ月後が「2008/02/29」、1カ月前が「2007/11/30」といったように、「日」の部分がずれる点だ。この結果からも分かるように、AddMonthsメソッドは、nカ月を加算した月に、該当する日付が含まれていない場合にはその月の月末の日付を返す。
カテゴリ:クラス・ライブラリ 処理対象:日付と時刻
使用ライブラリ:DateTime構造体(System名前空間)
■この記事と関連性の高い別の.NET TIPS
- 月初/月末の日付を求めるには?[C#、VB]
- 指定した月から特定の曜日の日付を取得するには?
- 週の始まりの日付を求めるには?
- カレンダー・コントロール(MonthCalendarコントロール)で複数月を表示するには?
Copyright© Digital Advantage Corp. All Rights Reserved.