VB.NETでDateOnlyとTimeOnlyを使いこなす!日付と時間の専門家になろう
生徒
「先生、VB.NETで『日付だけ』とか『時間だけ』を扱いたいとき、今までは全部一緒になっていて少し不便でした。何か良い方法はありますか?」
先生
「実は .NET 6 というバージョンから、DateOnly(デイト・オンリー)とTimeOnly(タイム・オンリー)という専用の道具が登場したんですよ。」
生徒
「専用の道具ですか!それを使うと、どう便利になるんですか?」
先生
「誕生日なら日付だけ、目覚まし時計なら時間だけ、といった具合に、無駄なくスッキリとプログラムが書けるようになります。さっそく使い方をマスターしましょう!」
1. DateOnlyとTimeOnlyとは?
これまでのVB.NETでは、日付と時間を扱うときは DateTime(デートタイム)という道具を使っていました。これは「2026年3月28日の午後7時」のように、日付と時間の両方をセットで持っている便利なものですが、時には「日付だけでいいのに……」と思うこともありました。例えば、お誕生日に「何時何分生まれ」という情報まで毎回ついてきたら少しややこしいですよね。
そこで登場したのが、DateOnly と TimeOnly です。名前の通り、DateOnlyは「日付だけ」を専門に扱い、TimeOnlyは「時間だけ」を専門に扱います。これらを使うことで、プログラムがより読みやすく、間違いの少ないものになります。パソコン初心者の方でも、「日付の箱」と「時間の箱」を別々に用意する、とイメージすれば分かりやすいでしょう。
2. DateOnlyで「日付だけ」を作成して表示する
まずは、DateOnlyを使って特定の日付を作ってみましょう。作り方は非常にシンプルです。年、月、日の順番に数字を指定するだけです。これまでのように時刻の「00:00:00」を気にする必要は一切ありません。
' 2026年10月10日の日付を作成します
Dim tanjobi As New DateOnly(2026, 10, 10)
' 画面に表示してみましょう
Console.WriteLine("記念日は: " & tanjobi.ToString())
実行結果は以下のようになります。
記念日は: 2026/10/10
ここで使っている New DateOnly というのは、「新しい日付の箱を一つ作る」という命令です。余計な時刻の情報が含まれていないため、日付同士を比較したり、カレンダーを表示させたりするときに非常に扱いやすくなります。
3. TimeOnlyで「時間だけ」を管理する
次は TimeOnly の使い方です。これは「毎日午前7時にお知らせを出す」といった、日付に関係なく特定の時間を扱いたいときに最適です。時、分の順番、あるいは秒まで細かく指定することもできます。プログラミング未経験の方にとっては、ストップウォッチやキッチンタイマーの設定をする感覚に近いかもしれません。
' 午後2時30分の時間を作成します
Dim oyatsuTime As New TimeOnly(14, 30)
' 画面に表示します
Console.WriteLine("おやつの時間は " & oyatsuTime.ToString("HH時mm分") & " です")
実行結果は以下のようになります。
おやつの時間は 14時30分 です
ToString の中で使っている HH時mm分 というのは、「時と分を好きな形式で表示してね」という指示(フォーマット)です。DateOnlyと同じように、日付の情報を持っていないため、純粋に「時間」としての処理に集中できます。
4. 今日の日付や今の時間を取得するコツ
今この瞬間の日付や時間を取得したい場合、これまでの DateTime.Now から変換するというステップが必要になります。少しだけ手順が増えますが、慣れてしまえば簡単です。パソコン内部では現在も DateTime が基準になっているため、そこから必要な部分だけを抜き出すという作業を行います。
' 今の全情報を取得
Dim genzai As DateTime = DateTime.Now
' 日付だけを取り出す
Dim kyo As DateOnly = DateOnly.FromDateTime(genzai)
' 時間だけを取り出す
Dim ima As TimeOnly = TimeOnly.FromDateTime(genzai)
Console.WriteLine("今日は: " & kyo.ToString())
Console.WriteLine("今は: " & ima.ToString())
実行結果は以下のようになります。
今日は: 2026/03/28
今は: 19:56:29
FromDateTime(フロム・デートタイム)という命令は、「DateTime型のデータから、自分専用の形を作ってね」という意味です。このように、既存の大きなデータから必要な部分だけを丁寧に切り分けることができます。
5. 日付の計算(〇日後、〇ヶ月前)を簡単に行う
DateOnlyの便利なところは、日付の計算がとても楽な点です。「今日から10日後は何日かな?」という計算をしたいとき、専用の命令を使うだけでカレンダーの複雑な計算をパソコンが自動でやってくれます。2月が28日だったり29日だったりしても、私たちは一切気にする必要がありません。
Dim baseDay As New DateOnly(2026, 3, 28)
' 5日後を計算
Dim goNichiGo As DateOnly = baseDay.AddDays(5)
' 2ヶ月前を計算
Dim niKagetsuMae As DateOnly = baseDay.AddMonths(-2)
Console.WriteLine("5日後は: " & goNichiGo.ToString())
Console.WriteLine("2ヶ月前は: " & niKagetsuMae.ToString())
実行結果は以下のようになります。
5日後は: 2026/04/02
2ヶ月前は: 2026/01/28
AddDays(アド・デイズ)は日数を足す、AddMonths(アド・マンス)は月数を足すという意味です。マイナスの数字を入れれば、過去に戻ることもできます。カレンダーをめくる作業をプログラムに任せられるのは非常に強力なメリットですね。
6. 時間の前後関係を比べる方法
TimeOnlyを使えば、二つの時間を比べるのも簡単です。「今の時間は、おやつの時間を過ぎたかな?」という判定をしたいときに使います。数字を比べるのと同じように、不等号(> や <)を使って直感的に書くことができます。プログラミング未経験の方でも、算数の授業を思い出すだけで書けてしまいます。
Dim ima As New TimeOnly(15, 0)
Dim kigen As New TimeOnly(17, 0)
' 不等号を使って比較します
If ima < kigen Then
Console.WriteLine("まだ時間内です。頑張りましょう!")
Else
Console.WriteLine("もうおしまいです。お疲れ様でした。")
End If
実行結果は以下のようになります。
まだ時間内です。頑張りましょう!
このように、時間の前後を数値のように扱えるため、予約システムや出退勤管理システムなどを作る際にとても役立ちます。日付のことを考えなくて良いので、ロジック(プログラムの論理)が非常にスッキリしますね。
7. 初心者が知っておきたい注意点
非常に便利な DateOnly と TimeOnly ですが、いくつか注意点があります。まず、これらは .NET 6 以降という新しい環境でしか使えません。とても古いバージョンのVB.NETを使っている場合は、エラーになってしまいます。また、データベースという「情報を保存する大きな棚」に保存する際、古い棚だと「日付と時間をセットにしたものしか入れられません!」と断られることもあります。
しかし、最新のプログラミング環境ではこれらを活用するのが当たり前になってきています。もし古い環境で使いたい場合は、保存する直前に DateTime型 に戻すといった工夫をすることもありますが、まずは「日付だけ」「時間だけ」を個別に扱えるという便利さを存分に味わってみてください。プログラムの整理整頓がとても楽しくなりますよ。
8. 日付と時間をマスターしてプログラムを美しく
ここまで、DateOnlyとTimeOnlyの使い方を詳しく解説してきました。いかがでしたでしょうか?「日付だけ」「時間だけ」を扱うという考え方は、私たちの日常生活と同じなので、意外と馴染みやすかったのではないでしょうか。VB.NETは初心者の方に優しい言語ですが、こうした新しい機能を使いこなすことで、より「プロっぽい」美しいコードが書けるようになります。
パソコンを触ったことがなくても、今回紹介したコードを少しずつ真似して書いてみれば、自分だけの便利なツールが作れるようになります。例えば、自分の次のお誕生日までの日数を計算したり、お昼休みの残り時間を表示したり。日付と時間の専門家として、色々なアイデアを形にしてみてください。焦らず一歩ずつ、プログラミングの世界を楽しんでいきましょう!