VB.NETで日付と時間を比較・計算する方法!CompareとSubtractを完全解説
生徒
「先生、VB.NETで作っているアプリで『期限が過ぎているかチェックする』機能を作りたいんです。どうすればいいですか?」
先生
「それなら、日付の比較や引き算を使えば解決しますよ。CompareやSubtractという命令が役に立ちます。」
生徒
「日付同士を比べたり、引き算したりできるんですね!なんだか難しそうですが、私にもできますか?」
先生
「大丈夫ですよ。基本的な考え方は数字の比較と同じです。具体的なやり方を詳しく説明していきましょう!」
1. VB.NETで日付を比較する基本
プログラミング未経験の方がまず知っておくべきことは、VB.NETでは「日付」というデータも、数字と同じように比べることができるという点です。例えば、今日と明日を比べれば、明日の方が「大きい(未来)」と判断されます。このように、時間の前後関係を判定することを日付の比較と呼びます。
パソコンを初めて触る方にとって、日付を比べるというのは少しイメージしにくいかもしれませんが、「カレンダーのページが後ろにある方が大きい」と考えてみてください。VB.NETでは、この比較を行うためにCompareという命令や、もっと直感的な不等号を使う方法が用意されています。これらをマスターすることで、「期限切れチェック」や「予約日の前後確認」といった便利な機能が作れるようになります。
2. 一番簡単!不等号を使った日付の比較
VB.NETで最も直感的に日付を比べる方法は、算数で使う「不等号」を使う方法です。大なり記号>や小なり記号<を使うことで、どちらの日付が未来か過去かを判定できます。特別な命令を覚える前に、まずはこの簡単な方法から試してみましょう。
' 今日の日付と期限の日付を用意します
Dim kyo As Date = Date.Today
Dim kigen As New Date(2026, 12, 31)
' 不等号を使って比較します
If kyo < kigen Then
Console.WriteLine("まだ期限内です。")
Else
Console.WriteLine("期限が過ぎています!")
End If
実行結果は以下のようになります。
まだ期限内です。
ここで使っているDate.Todayは「今日の日付」、New Date(2026, 12, 31)は「指定した特定の日付」を指しています。このように、数字を比べるのと同じ感覚で書けるのがVB.NETの優しいところです。これを応用すれば、スケジュール管理ソフトなども簡単に作れますね。
3. 厳密に判定するDateTime.Compareメソッド
次に紹介するのは、DateTime.Compare(デートタイム・コンペア)という命令です。この命令は、二つの日付を比較して「1」「0」「-1」という三つの数字で結果を教えてくれます。プログラミングでは、このように結果を数字で受け取る形式がよく使われます。
なぜ不等号ではなくこの命令を使うのかというと、結果が「前か、後ろか、あるいは全く同じか」を一発で数値として取得できるため、より複雑な条件分岐を作るときに便利だからです。パソコンに詳しくない方には少し難しく感じるかもしれませんが、判定結果のルールさえ覚えてしまえば大丈夫です。以下のコードで動きを確認してみましょう。
' 二つの日付を比較します
Dim t1 As New Date(2026, 3, 28)
Dim t2 As New Date(2026, 4, 1)
Dim kekka As Integer = DateTime.Compare(t1, t2)
' 結果を判定します
If kekka < 0 Then
Console.WriteLine("t1はt2より前の日付です。")
ElseIf kekka = 0 Then
Console.WriteLine("二つの日付は同じです。")
Else
Console.WriteLine("t1はt2より後の日付です。")
End If
実行結果は以下のようになります。
t1はt2より前の日付です。
結果がマイナス(-1)なら左側が過去、プラス(1)なら左側が未来、ゼロ(0)なら同じという意味になります。少しパズルのようですが、慣れると非常に強力な武器になります。
4. 日付の引き算!Subtractで差を求める
「期限まであと何日?」という計算をしたいときに使うのが、Subtract(サブトラクト)という命令です。これは英語で「差し引く」という意味があります。日付同士を引き算すると、その結果は単なる日付ではなく、「時間の長さ(期間)」という特別なデータになります。
VB.NETでは、この期間を表すデータのことをTimeSpan(タイムスパン)型と呼びます。単なる数字の引き算とは違い、「何日間あるか」だけでなく「何時間あるか」といった細かい情報まで取り出すことができます。プログラミング未経験の方でも、以下の例を見れば使い方はすぐに分かりますよ。
' イベント当日と今日の日付を用意
Dim eventDay As New Date(2026, 10, 10)
Dim kyo As Date = Date.Today
' 引き算をして期間(差)を求めます
Dim sa As TimeSpan = eventDay.Subtract(kyo)
' 差を表示します(TotalDaysで合計の日数を取得)
Console.WriteLine("イベントまであと " & sa.TotalDays & " 日です。")
実行結果は以下のようになります。
イベントまであと 196 日です。
sa.TotalDaysと書くことで、期間の中から「日数」だけを抜き出しています。これを使えば、カウントダウンタイマーなどの面白いアプリが作れるようになりますね。
5. TimeSpanを使ってより詳細な差を知る
先ほどの引き算で出てきたTimeSpan型は、とても多機能です。日数だけでなく、時間や分、秒の単位でも差を教えてくれます。例えば、深夜のメンテナンス終了まで「あと何分か」を知りたい場合などに役立ちます。パソコンの中では、日付と時間は密接に関わっているため、このように細かく計算できるのです。
プログラミングでは、一つの計算から色々な情報が引き出せることがよくあります。以下のサンプルコードで、時間の差をより詳しく表示する方法を見てみましょう。
' 現在時刻と目標時刻の差
Dim goalTime As New Date(2026, 3, 28, 23, 59, 59)
Dim genzai As Date = Date.Now
' 引き算をします
Dim jikanSa As TimeSpan = goalTime.Subtract(genzai)
Console.WriteLine("残り時間:")
Console.WriteLine(jikanSa.Hours & "時間")
Console.WriteLine(jikanSa.Minutes & "分")
Console.WriteLine(jikanSa.Seconds & "秒")
実行結果は以下のようになります。
残り時間:
4時間
6分
35秒
Date.Nowは、日付だけでなく今の時刻(秒単位)まで取得する命令です。それらをSubtractで引き算することで、まるでストップウォッチのような細かい差を計算できるようになります。初心者のうちは、このHours(時)やMinutes(分)といった単語を組み合わせて使う練習をしてみましょう。
6. 比較演算子のまとめと使い分けのコツ
VB.NETには日付を比べる方法がいくつかあるため、どれを使えばいいか迷ってしまうかもしれません。基本的には、単純な「もし~より後なら」という条件分岐には不等号(< や >)を使い、「日付の差を数値として保存したい」場合にはCompareメソッドを使うのが一般的です。
また、注意点として「日付のみ(Date)」と「時刻を含む日付(DateTime)」を混ぜて比較するときは気をつけましょう。時刻が含まれていると、同じ日付でも時間が少しでも違えば「一致しない」と判定されてしまいます。正確な比較を行うためには、データの形を揃えることが重要です。これはプログラミング全般に言える大切な習慣ですね。
7. 期間の計算で間違えやすいポイント
日付の引き算(Subtract)で初心者が間違いやすいのは、過去と未来を逆にして引き算してしまうことです。例えば、昨日から今日を引くと、結果はマイナスの期間になってしまいます。画面に表示したときに「あと -5日」と出ると少し格好悪いですよね。
そんなときは、常に「未来の日付.Subtract(過去の日付)」の順番で書くように意識しましょう。もし結果がマイナスになってしまった場合は、絶対値を求めるMath.Absという命令を組み合わせて修正することもできますが、まずは引き算の順番を正しく覚えるのが先決です。カレンダーを右から左へめくるように計算するのがコツですよ。
8. 日付比較ができると広がるプログラミングの世界
ここまで、日付を比べたり引き算したりする方法を解説してきました。いかがでしたでしょうか?「Compare」や「Subtract」という言葉は難しく聞こえますが、やっていることはとてもシンプルです。日付を自由に操れるようになると、業務効率化ツールや個人的な予定管理アプリなど、作れるものの幅が一気に広がります。
パソコン初心者の方も、まずは今回紹介したサンプルコードをコピーして、自分で日付の数字を書き換えて実行してみてください。自分で数字を変えて、結果が変わるのを見るのが一番の勉強になります。VB.NETは初心者にとても優しい言語ですので、ぜひ焦らず一歩ずつ、日付操作のマスターを目指していきましょう!