VB.NETで曜日を取得する方法を完全ガイド!DayOfWeekの使い方
生徒
「先生、VB.NETで今日が何曜日かを知る方法はありますか?カレンダーアプリを作ってみたいんです!」
先生
「もちろんです!VB.NETには、指定した日付が何曜日かを教えてくれるDayOfWeekという便利な機能があるんですよ。」
生徒
「曜日がわかれば、『土日だけ休み』というプログラムも作れそうですね。どうやって使うんですか?」
先生
「その通りです。ただ、パソコンは曜日を名前ではなく『数字』で管理しているんです。そのあたりのコツも一緒に解説しますね!」
1. 曜日を取得するDayOfWeekとは?
プログラミング未経験の方にとって、パソコンがどうやって曜日を判断しているかは不思議かもしれません。VB.NETでは、日付データを扱う DateTime(データタイム) という仕組みの中に、その日が何曜日かを保持している DayOfWeek(デイ・オブ・ウィーク) というプロパティが用意されています。
「プロパティ」とは、そのデータが持っている「属性」や「特徴」のことです。例えば、人間というデータに「身長」や「名前」というプロパティがあるように、日付というデータには「曜日」というプロパティが備わっています。これを使うことで、わざわざカレンダーを計算しなくても、一瞬で「日曜日」や「月曜日」といった情報を引き出すことができるのです。
2. パソコンは曜日を「数字」で覚えている
ここで、初心者の方が一番驚くポイントがあります。実はパソコンは内部的に、曜日を「月、火、水」といった文字ではなく、0から6までの数字で管理しています。これを「列挙型(れっきょがた)」と呼びますが、今は「数字と曜日がセットになっている名簿」のようなものだと考えてください。
具体的には、日曜日が「0」、月曜日が「1」、火曜日が「2」といった具合に決まっています。プログラムで「もし日曜日だったら」という条件を作るときは、この「0」という数字をチェックすることになります。一見面倒に思えますが、数字で管理することで計算がしやすくなるというメリットがあるのです。
' 今日の日付情報を取得します
Dim kyo As DateTime = DateTime.Now
' 曜日を数字(列挙型)として取り出します
Dim yobiNoNumber As DayOfWeek = kyo.DayOfWeek
' 数字として表示してみると、日曜日なら0、月曜日なら1が出ます
Console.WriteLine("曜日の番号は: " & CInt(yobiNoNumber))
曜日の番号は: 4
3. 曜日によって処理を分ける方法(If文との組み合わせ)
曜日を取得する最大のメリットは、曜日ごとにプログラムの動きを変えられることです。例えば、土曜日や日曜日のときだけ「今日はお休みです」と画面に表示させるプログラムを作ってみましょう。ここで使うのが If(イフ)文 です。
If文は「もし~なら」という条件を作る命令です。これと DayOfWeek.Saturday(土曜日)や DayOfWeek.Sunday(日曜日)という言葉を組み合わせることで、直感的で分かりやすいコードを書くことができます。数字を直接書かなくても、このように英単語を使うことで、後でコードを読み返したときに意味が分かりやすくなります。
Dim ima As DateTime = DateTime.Now
' もし今日が土曜日か日曜日だったら
If ima.DayOfWeek = DayOfWeek.Saturday Or ima.DayOfWeek = DayOfWeek.Sunday Then
Console.WriteLine("今日はお休み!ゆっくりしましょう。")
Else
Console.WriteLine("今日はお仕事や学校の日ですね。")
End If
今日はお仕事や学校の日ですね。
4. 曜日を日本語の「月・火・水」で表示する
DayOfWeek をそのまま画面に表示すると、英語で「Thursday」のように表示されてしまいます。日本のアプリなら「木曜日」や「(木)」と表示したいですよね。そのために一番簡単な方法は、 ToString(トゥー・ストリング) という命令に特定のルールを指定することです。
カッコの中に "ddd" と書くと「月」や「火」といった一文字の形式になり、 "dddd" と書くと「月曜日」や「火曜日」という長い形式になります。これを覚えるだけで、小難しい変換処理を書かなくても、あっという間に日本語での曜日表示が完成します。初心者の方にはこの方法が一番おすすめです。
Dim kyo As DateTime = DateTime.Now
' 漢字一文字の曜日を表示
Console.WriteLine("今日は " & kyo.ToString("ddd") & " です")
' 「〇曜日」という形式で表示
Console.WriteLine("正式には " & kyo.ToString("dddd") & " です")
今日は 木 です
正式には 木曜日 です
5. 特定の日付の曜日を調べる方法
「今」だけでなく、過去や未来の日付の曜日を調べることもできます。例えば、自分が生まれた日が何曜日だったのか、あるいは来年のクリスマスが何曜日なのかを計算してみましょう。 New DateTime(年, 月, 日) という書き方で、好きな日付の箱を作ることができます。
パソコンを触ったことがない方は、「日付を新しく作る」という感覚が最初は掴みにくいかもしれません。しかし、一度日付さえ作ってしまえば、あとは今まで学んだ DayOfWeek を使うだけで、どんなに遠い未来の日付でも瞬時に曜日を教えてくれます。カレンダーを何枚もめくる必要はないのです。
' 2026年12月25日の日付を作ります
Dim xmass As New DateTime(2026, 12, 25)
' その日の曜日を日本語で取得
Dim yobi As String = xmass.ToString("dddd")
Console.WriteLine("2026年のクリスマスは " & yobi & " ですね!")
2026年のクリスマスは 金曜日 ですね!
6. 曜日の判定で役立つテクニック
実務的な話を少しすると、複数の曜日を判定するときには Select Case(セレクト・ケース) という命令を使うと、コードがとてもスッキリします。If文を何度も並べるよりも、曜日に応じて「月曜ならこれ」「金曜ならこれ」と仕分けするようなイメージで書くことができます。
「お月見の日は月曜か月曜以外か」とか「ゴミ出しの日の判定」など、複雑なスケジュール管理もこの方法なら迷わず書けます。プログラミングの面白さは、こうして日常生活のルールをそのままパソコンの中に再現できるところにあります。まずは簡単な曜日の表示から始めて、徐々にこうした分岐処理に挑戦してみるのが良いでしょう。
7. 曜日操作をマスターしてカレンダー作りに挑戦
ここまで学んできた DayOfWeek の知識があれば、基本的なカレンダー機能はもう作れます。「1日が何曜日から始まるか」を調べれば、カレンダーの数字をどこから並べればいいか判断できるからです。日付と曜日の関係は、プログラミングにおける基本中の基本ですが、非常に奥が深いものです。
初心者のうちは、英語の曜日名や数字の0から6といったルールに戸惑うこともあるでしょう。しかし、VB.NETという言語は、初心者に対しても非常に親切に設計されています。 ToString("dddd") のように、直感的に使える仕組みが用意されているからです。今回紹介したコードを実際に自分のパソコンで動かしてみて、日付が変わるたびに曜日が正しく表示される感動をぜひ味わってください。それがプログラミング上達への一番の近道になります!