VB.NET 日付の加算 減算と比較 日付の差

今から〇〇日後、〇〇ヵ月後、〇〇年後の日付を求めたり、
今から〇〇日前、〇〇ヵ月前、〇〇年前の日付を求める事ができます。

また、2つの日付の比較、判定、日数差を得る方法もご紹介します。

日付の加算、減算

Dim d As New DateTime(2019, 1, 31)

Console.WriteLine("現在 = " & d)
Console.WriteLine("1日後 = " & d.AddDays(1))
Console.WriteLine("100日後 = " & d.AddDays(100))
Console.WriteLine("1日前 = " & d.AddDays(-1))
Console.WriteLine("31日前 = " & d.AddDays(-31))
Console.WriteLine()

Console.WriteLine("現在 = " & d)
Console.WriteLine("1ヵ月後 = " & d.AddMonths(1))
Console.WriteLine("2ヵ月後 = " & d.AddMonths(2))
Console.WriteLine("1ヵ月前 = " & d.AddMonths(-1))
Console.WriteLine("2ヵ月前 = " & d.AddMonths(-2))
Console.WriteLine()

Console.WriteLine("現在 = " & d)
Console.WriteLine("1年後 = " & d.AddYears(1))
Console.WriteLine("10年後 = " & d.AddYears(10))
Console.WriteLine("1年前 = " & d.AddYears(-1))
Console.WriteLine("10年前 = " & d.AddYears(-10))
現在 = 2019/01/31
1日後 = 2019/02/01
100日後 = 2019/05/11
1日前 = 2019/01/30
31日前 = 2018/12/31

現在 = 2019/01/31
1ヵ月後 = 2019/02/28
2ヵ月後 = 2019/03/31
1ヵ月前 = 2018/12/31
2ヵ月前 = 2018/11/30

現在 = 2019/01/31
1年後 = 2020/01/31
10年後 = 2029/01/31
1年前 = 2018/01/31
10年前 = 2009/01/31

日の加算を行うには、AddDaysメソッド、
月の加算を行うには、AddMonthsメソッド、
年の加算を行うには、AddYearsメソッドを使います。

減算するメソッドは用意されていませんが、
負の数を指定する事で実現できます。

日、年の加算、減算は特に問題無いと思いますが、
月の加算、減算は、少し特殊です。

1/31 に1加算すると 2/28 になっていますが、
「加算した月の最大日数」が結果として返ります。

減算した時も同様です。

日付の比較

Dim dayA As New DateTime(2019, 1, 31)
Dim dayB As New DateTime(2019, 1, 31)
Dim dayC As New DateTime(2019, 2, 1)
Dim dayD As New DateTime(2018, 12, 10)

If dayA.Date = dayB.Date Then
    Console.WriteLine("dayAとdayBは同じ日付です")
End If

If dayA.Date <> dayC.Date Then
    Console.WriteLine("dayAとdayCは違う日付です")
End If

If dayA.Date < dayC.Date Then
    Console.WriteLine("dayCよりdayAの方が古いです")
End If

If dayA.Date > dayD.Date Then
    Console.WriteLine("dayAよりdayDの方が古いです")
End If


Dim b As Boolean
b = dayA.Date.CompareTo(dayC.Date)

If b = 0 Then
    Console.WriteLine("dayAとdayCは同じ日付です")
ElseIf b = 1 Then
    Console.WriteLine("dayAの方が新しい日付です(dayCより)")
ElseIf b = -1 Then
    Console.WriteLine("dayAの方が古い日付です(dayCより)")
End If
dayAとdayBは同じ日付です
dayAとdayCは違う日付です
dayCよりdayAの方が古いです
dayAよりdayDの方が古いです
dayAの方が古い日付です(dayCより)

日付を比較するには、DateTime.Dateを使って比較します。

値が同じであれば、同じ日である事になります。

値が小さい方が古い日付、値が大きい方が新しい日付になります。


2つの日付について、同じか、古いか、新しい、全てを判断するには、
DateTime.Date.CompareToメソッドを使います。

結果が 0 であれば、同じ、
結果が 1 であれば、左の日付が新しい
結果が -1 であれば、左の日付が古い

となります。

スポンサーリンク

日付の差を求める(日数差)

Dim dayA As New DateTime(2019, 1, 31)
Dim dayB As New DateTime(2019, 1, 31)
Dim dayC As New DateTime(2019, 2, 1)
Dim dayD As New DateTime(2018, 12, 10)

Dim d As Double

d = (dayA.Date - dayB.Date).TotalDays
Console.WriteLine("dayAとdayB = " & d)

d = (dayA.Date - dayC.Date).TotalDays
Console.WriteLine("dayAとdayC = " & d)

d = (dayA.Date - dayD.Date).TotalDays
Console.WriteLine("dayAとdayD = " & d)
dayAとdayB = 0
dayAとdayC = -1
dayAとdayD = 52

日付の差を求めるには、TotalDaysメソッドを使います。

結果が 0 であれば、同じ、
結果の符号がマイナスであれば、左の日付が古く、
結果の符号がプラスであれば、左の日付が新しい

となります。

実際の数値は、2つの日付の差(日数)を表しています。


これで日付の加算、減算、比較ができるようになりました。