VB.NETで文字列を日付に変換する方法を完全解説!ParseとTryParseの使い分け
生徒
「先生、ユーザーが画面に入力した『2026/03/26』という文字を、プログラムの中で日付として扱いたいのですが、どうすればいいですか?」
先生
「それは『型変換(かたへんかん)』が必要ですね。文字のデータと日付のデータは種類が違うので、専用の命令を使って変換してあげるんです。」
生徒
「型変換ですか?難しそうですが、初心者でも簡単にできますか?」
先生
「はい、VB.NETにはParseやTryParseといった便利な道具があります。使い分けを覚えれば、入力エラーにも強いプログラムが作れますよ。早速見ていきましょう!」
1. 文字列から日付への変換とは?
プログラミング未経験の方にとって、「文字」と「日付」が別物であるという感覚は少し不思議かもしれません。例えば、私たちがメモ帳に書いた「2026/03/26」は、パソコンにとってはただの「文字の並び(文字列)」でしかありません。これに対して、パソコンがカレンダーの計算をしたり、一日後の日付を求めたりするために使う特別な形式が「日付型(DateTime型)」です。
文字列から日付への変換とは、人間が読み書きするテキストデータを、プログラムが計算できる日付データへと「翻訳」する作業のことです。この翻訳が正しく行われることで、入力された日付が正しいかどうかをチェックしたり、期限を計算したりするアプリケーションを作ることが可能になります。VB.NETでは、この翻訳を行うために主に二つの命令が用意されています。
2. Parseメソッドで日付に変換する基本
最もシンプルに変換を行うのが Parse(パース) という命令です。Parseには「解析する」という意味があります。文字列を解析して、日付として読み取れる部分があれば日付データに変換してくれます。使い方は、日付を入れるための箱(変数)を用意し、そこに解析した結果を代入するだけです。
ここで言う「変数(へんすう)」とは、データを一時的に入れておくための「箱」のことです。日付を入れるための箱は DateTime という種類の形をしています。Parseは非常に強力で、スラッシュ区切りの「2026/03/26」だけでなく、ハイフン区切りの「2026-03-26」なども自動で判別してくれます。ただし、解析できない文字を渡すとエラーになってしまうという特徴があります。
' 文字列のデータを用意します
Dim hizukeMoji As String = "2026/03/26"
' Parseを使って日付データに変換し、箱(hizukeData)に入れます
Dim hizukeData As DateTime = DateTime.Parse(hizukeMoji)
' 変換した日付を表示します
Console.WriteLine("変換成功: " & hizukeData.ToString("yyyy年MM月dd日"))
変換成功: 2026年03月26日
3. エラーを防ぐTryParseの賢い使い方
Parseは便利ですが、もしユーザーが間違えて「あいうえお」などの日付ではない文字を入力した場合、プログラムが「解析できません!」と驚いて停止してしまいます。これをプログラミング用語で「例外(れいがい)が発生する」と言います。これを防ぐために使われるのが TryParse(トライパース) です。
TryParseは「解析に挑戦(Try)してみる」という意味です。もし解析できれば変換後の日付を返し、解析できなければ「失敗したよ」という合否の結果だけを教えてくれます。プログラムが突然止まることがないため、実務のプログラムではこちらの方がよく使われます。合否は「Boolean(ブーリアン)」という「はい(True)」か「いいえ(False)」で答える特別なデータで受け取ります。
Dim nyuryoku As String = "2026/99/99" ' 存在しない日付
Dim kekkaHizuke As DateTime ' 変換した日付を入れる準備
' 解析に挑戦!成功したかどうかを checkResult に入れます
Dim checkResult As Boolean = DateTime.TryParse(nyuryoku, kekkaHizuke)
If checkResult = True Then
Console.WriteLine("正しい日付です: " & kekkaHizuke)
Else
Console.WriteLine("日付の形式が正しくありません。")
End If
日付の形式が正しくありません。
4. 特定の形式を指定して変換するParseExact
時には、「20260326」のように区切り文字がない特殊な形式の文字を日付にしたいこともあります。通常のParseでは混乱してしまうような場合、ParseExact(パース・エグザクト) という命令を使います。Exactは「正確に」という意味で、私たちが「こういう形式で読み取ってね」と詳細な指示(フォーマット)を出すことができます。
例えば、「西暦4桁、月2桁、日2桁」が隙間なく並んでいることを指示するには "yyyyMMdd" という暗号のような記号を使います。これを使うことで、自動判別ではなく、より厳密に文字を解析することが可能になります。データが少し特殊な場合や、データの形が決まっているシステム間の連携などで重宝されるテクニックです。
Dim specialMoji As String = "20260326"
Dim format As String = "yyyyMMdd"
' 形式を厳密に指定して変換します
Dim result As DateTime = DateTime.ParseExact(specialMoji, format, Nothing)
Console.WriteLine("厳密な変換結果: " & result.ToShortDateString())
厳密な変換結果: 2026/03/26
5. 時刻が含まれる文字列の変換方法
日付だけでなく、時間(時・分・秒)が含まれる場合も同じように変換できます。「2026/03/26 15:30:45」のような文字も、VB.NETは賢いので自動的に時間の情報まで抽出して日付型の箱に収めてくれます。日付型の箱は、日付だけでなく時刻も一緒に持っておくことができる非常に便利な箱なのです。
変換したあとは、先ほど学んだように .Hour(時)や .Minute(分)といったプロパティを使って、時間部分だけを取り出して使うこともできます。予約システムやタイムレコーダーのようなアプリを作る際には、この「日付と時刻の両方を変換する」という操作が必ず必要になります。初心者の方は、まずは日付だけの変換に慣れ、次に時刻を含めた変換に挑戦してみると良いでしょう。
Dim jikanMoji As String = "2026/03/26 15:30:00"
' 時刻込みで変換
Dim fullData As DateTime = DateTime.Parse(jikanMoji)
' 時間だけを取り出して表示してみる
Console.WriteLine("登録時間は " & fullData.Hour & " 時ですね。")
登録時間は 15 時ですね。
6. 日本語特有の「和暦」を日付に変換する際の注意
「令和8年3月26日」のような和暦(われき)の文字列を変換したい場合、少しだけ設定が必要です。通常、パソコンは西暦を中心に考えているため、何も言わないと和暦をうまく理解できないことがあります。これを解決するには、「日本のカレンダーを使って解析してね」と教えるための設定を追加します。
具体的には CultureInfo(カルチャ・インフォ)という仕組みを使い、日本の言語設定(ja-JP)を指定します。これによって、和暦の文字列もスムーズに日付型のデータへと変換できるようになります。日本の業務システムでは必須の知識ですが、最初は「そんなこともできるんだ」という程度に知っておくだけでも十分です。VB.NETは世界中の日付形式に対応できる柔軟性を持っているのです。
7. 変換をマスターして入力に強いアプリを作ろう
文字列を日付に変えるテクニックを習得すると、プログラムの表現力は一気に高まります。ユーザーが自由に入力した言葉を、システムが正しく「日付」として認識できるかどうかは、アプリの使い勝手に大きく影響します。特にお伝えしたいのは、 TryParse の重要性です。失敗してもエラーで止まらない優しいプログラムこそ、良いプログラムの条件の一つです。
パソコンを初めて触る方にとって、記号の並びは難しく見えるかもしれませんが、今回紹介したコードをコピーして動かしてみることから始めてみてください。実際に「2026/03/26」が「2026年3月26日」と表示されたときの感動は、プログラミングの醍醐味です。この型変換の基礎をしっかり固めて、自分だけのカレンダーやスケジュール管理ツール作りに活かしていきましょう。