VB.NETでカレンダー計算を完全マスター!CultureInfo.Calendarの使い方ガイド
生徒
「先生、VB.NETで日付を扱っているのですが、日本独自の『和暦(令和や平成)』で表示したり計算したりすることはできますか?」
先生
「もちろんですよ。VB.NETには『CultureInfo(カルチャー情報)』という機能があって、それを使えば和暦を含めた世界中のカレンダー計算ができるんです。」
生徒
「和暦まで扱えるんですね!でも、西暦から和暦に直すのって計算が大変そうです……。」
先生
「プログラムに任せれば、令和何年か、今月は何日まであるか、といった計算も自動でやってくれます。基本的なやり方を一緒に見ていきましょう!」
1. CultureInfoとカレンダー計算とは?
プログラミングで日付を扱うとき、多くの場合は「2026年3月28日」といった西暦を使います。しかし、日本では「令和8年」という和暦もよく使いますよね。このように、国や地域、文化によって異なる日付の数え方を管理するのがCultureInfo(カルチャー・インフォ)という仕組みです。
パソコンを触ったことがない方にとって「カルチャー(文化)」という言葉は少し意外かもしれませんが、プログラミングの世界では「言語や地域の決まりごと」を指します。この仕組みの中にあるCalendar(カレンダー)という道具を使うことで、複雑な暦の計算を自分で行わずに、パソコンに丸投げすることができるようになります。例えば、特定の月が何日まであるか、今年はうるう年か、といった判定もこのカレンダー機能が担当しています。
2. 日本の和暦カレンダーを準備する方法
和暦を扱うためには、まず「日本の文化設定」と「和暦カレンダーの道具」を準備する必要があります。VB.NETでは、JapaneseCalendar(ジャパニーズ・カレンダー)という専用のクラスが用意されています。これを使うことで、プログラムは日本の元号(令和、平成、昭和など)を理解できるようになります。
まずは、和暦を使って今の「年」を取得する基本的なコードを見てみましょう。プログラミングの「変数(データをいれる箱)」を使いながら進めていきます。
' 日本の文化情報を取得します
Dim culture As New System.Globalization.CultureInfo("ja-JP")
' 和暦カレンダーの道具を準備します
Dim jpCal As New System.Globalization.JapaneseCalendar()
' 今日の日付を用意します
Dim kyo As Date = Date.Now
' 和暦での「年」を取り出します
Dim warekiYear As Integer = jpCal.GetYear(kyo)
Console.WriteLine("現在の和暦の年は:" & warekiYear & "年です")
実行結果は以下のようになります。
現在の和暦の年は:8年です
現在の年が「令和8年」であれば、数字の「8」が取得できます。このように、西暦のデータを和暦の数え方に変換してくれるのがカレンダー機能の便利なところです。
3. 特定の月が何日まであるか計算する
カレンダー計算でよく使うのが、「今月は何日まであるのかな?」という確認です。2月は28日だったり29日だったりしますし、31日まである月もあれば30日までの月もありますよね。これを判別するには、GetDaysInMonth(ゲット・デイズ・イン・マンス)という命令を使います。
この命令を使うと、指定した年と月の日数を正確に教えてくれます。うるう年の判定も自動で行ってくれるので、私たちがカレンダーをめくって確認する必要はありません。以下のコードで試してみましょう。
' 和暦カレンダーを使います
Dim cal As New System.Globalization.JapaneseCalendar()
' 令和8年(2026年)2月が何日まであるか調べます
Dim nissu As Integer = cal.GetDaysInMonth(8, 2)
Console.WriteLine("令和8年2月は " & nissu & " 日まであります")
実行結果は以下のようになります。
令和8年2月は 28 日まであります
このように、年と月の数字を渡すだけで、正しい日数が返ってきます。スケジュール管理ソフトや家計簿アプリなどを作る際に、月末の日付を自動で出すために非常によく使われるテクニックです。
4. 和暦で「令和〇年」と名前付きで表示する
数字の「8」だけではなく、ちゃんと「令和8年」と表示したいこともありますよね。そのためには、日付のデータを文字に変換するときに、先ほど準備した「日本の文化情報(CultureInfo)」を教えてあげます。そうすることで、パソコンは「あ、日本語の和暦で表示してほしいんだな」と理解してくれます。
この方法は、単に計算するだけでなく、画面にきれいな日本語の日付を出したいときに最適です。
' 日本の文化設定(和暦対応)を作ります
Dim ci As New System.Globalization.CultureInfo("ja-JP")
ci.DateTimeFormat.Calendar = New System.Globalization.JapaneseCalendar()
' 今日の日付
Dim ima As Date = Date.Now
' 作成した設定を使って表示を整えます
Dim text As String = ima.ToString("ggyy年MM月dd日", ci)
Console.WriteLine("本日の日付:" & text)
実行結果は以下のようになります。
本日の日付:令和08年03月28日
フォーマットの中に書いた「gg」という記号が「元号(令和など)」を表しています。このように、ToStringという命令に「文化情報(ci)」を添えてあげるのがポイントです。これだけで、本格的な日本のシステムのような表示が作れますね。
5. 1年が何日間あるかを調べる方法
カレンダー計算の中には、1年間が合計で何日あるかを調べる GetDaysInYear(ゲット・デイズ・イン・イヤー)という命令もあります。通常の年は365日ですが、うるう年は366日になりますよね。これを和暦の年を指定して調べることができます。
あまり頻繁に使うことはありませんが、「今年の残り日数を計算する」ようなプログラムを作るときには役立ちます。パソコンが過去から未来までの暦のデータを全て持っているからこそできる計算です。
' カレンダーの道具を準備
Dim myCal As New System.Globalization.JapaneseCalendar()
' 令和12年が何日間あるか調べます
Dim totalDays As Integer = myCal.GetDaysInYear(12)
Console.WriteLine("令和12年は 1年間で " & totalDays & " 日あります")
実行結果は以下のようになります。
令和12年は 1年間で 366 日あります
実行結果から、令和12年(西暦2030年)がうるう年であることが分かります。難しい計算式を使わずに、たった一行で答えが出るのはプログラミングの素晴らしいところですね。未経験の方でも、こうした便利な道具があることを知っておくだけで、開発の幅がぐっと広がります。
6. 世界のカレンダー(イスラム暦やタイ暦)への応用
今回は日本の和暦を中心に解説していますが、CultureInfo を変えるだけで、世界中のカレンダーに対応できます。例えば、タイで使われている「タイ仏暦」や、中東で使われている「イスラム暦」なども、同じような手順で扱うことが可能です。
プログラムの書き方は和暦のときとほとんど変わりません。地域を指定する "ja-JP" の部分を、その国のコード(タイなら "th-TH" など)に変えるだけです。一つのやり方を覚えれば、世界中で通用する技術になるのが CultureInfo.Calendar の魅力です。グローバルな視点でプログラムを見つめ直すと、新しい発見があるかもしれません。
7. カレンダー計算で初心者が注意するポイント
便利なカレンダー計算ですが、一つだけ注意点があります。それは「元号の変わり目」です。例えば、昭和から平成、平成から令和に変わったとき、パソコンの設定やソフトのバージョンが古いと、新しい元号を正しく表示できないことがあります。
VB.NETという言語自体は、Windowsのアップデートなどを通じて最新の元号情報を手に入れるようになっていますが、非常に古いパソコンで動かすときは注意が必要です。また、和暦の「1年」を「元年」と表示したい場合は、少し工夫したプログラムを書く必要があります。まずは数字で「1年」と出せるようになり、慣れてきたら漢字の「元年」に挑戦してみるのが、挫折しないためのコツですよ。
8. カレンダー機能を使いこなして便利なツールを作ろう
ここまで、和暦カレンダーの扱い方や日数の計算方法について解説してきました。一見難しそうな暦の計算も、VB.NETの標準機能を使えば驚くほど簡単に実装できることがお分かりいただけたかと思います。パソコン初心者の方も、まずは今回紹介したコードを動かして、自分の誕生日を和暦に直してみたりして遊んでみてください。
日付やカレンダーの操作は、どんなアプリを作るにしても必ず必要になる基礎知識です。今回学んだ CultureInfo や Calendar クラスの使い方をマスターすれば、ユーザーにとって本当に使いやすい、親切なシステムを作ることができるようになります。一歩ずつ、楽しみながらプログラミングの学習を進めていきましょう!