C#で文字列から日時をパースする方法を完全解説!初心者にやさしいDateTime.Parse入門
生徒
「パソコンで日付を扱うときって、文字として書かれた日付をC#に読み取らせることってできますか?」
先生
「もちろんできますよ。C#には文字列から日付や時刻を読み取る“パース”という仕組みがあります。」
生徒
「パースってどういう意味なんですか?」
先生
「パースとは、文字として書かれた内容を、その意味に応じた形に変換することです。例えば『2025/03/01』という文字を、コンピューターが本当の日付として扱えるように変換することですね。」
生徒
「なるほど!どんなふうに書けば変換できるんですか?」
先生
「では、C#で文字列から日時をパースする基本をいっしょに見ていきましょう。」
1. 文字列から日時をパースするとは?
パソコンで扱う日付や時刻は、本来DateTime型として保持されます。しかし、ユーザーがキーボードで入力した日付や、ファイルやデータベースに保存されている日付は、ほとんどの場合文字列(string)です。この文字の状態では、計算ができなかったり、比較ができなかったりします。
そこで、C#では文字列として書かれた日付を本当の日時として扱えるように変換する「パース(解析)」が必要になるのです。日常生活でたとえるなら、紙にメモされた日時をカレンダーアプリに登録するような作業だと思うと分かりやすいでしょう。
2. DateTime.Parseで文字列から日時を読み取る
C#で最も簡単に文字列を日時に変換する方法が、DateTime.Parseです。これは、一般的な日付の書き方であれば自動的に読み取ってくれる便利な仕組みです。たとえば「2025/02/01」「2025-02-01」「2025年2月1日」など、よくある表記であれば問題なく変換できます。
string text = "2025/02/01";
DateTime date = DateTime.Parse(text);
Console.WriteLine(date);
このコードでは、文字列で書かれた日付をDateTime型に変換し、結果を画面に表示しています。変換された日付は内部的に「日付型」として扱われるので、日付の比較や計算などが自由にできるようになります。
2025/02/01 0:00:00
3. 日付の形式が決まっている場合はDateTime.ParseExact
文字列の日付形式が明確に決まっている場合は、DateTime.ParseExactを使うことでより安全に変換できます。このメソッドは、どんな書式で日付が書かれているかを指定し、その書式通りでなければエラーにするため、確実なパースが必要な場面で便利です。
例えば「2025-02-01」という形式を決めて処理したい場合は次のように書きます。
string text = "2025-02-01";
string format = "yyyy-MM-dd";
DateTime date = DateTime.ParseExact(text, format, null);
Console.WriteLine(date);
この方法では指定した書式にぴったり一致しないと変換できないため、日付の形式がバラバラに入ってくる心配がある場合は特に役に立ちます。
4. パースが失敗する可能性があるときはTryParseを活用
ユーザーが自由に入力できる場合など、いつも正しい形式で日付が渡されるとは限りません。そのようなときに使えるのが、変換が成功したかどうかを判定できるDateTime.TryParseです。
このメソッドは変換に失敗してもエラーを出さず、結果を受け取れたかどうかを真偽値で返してくれるため、プログラムが中断する心配がありません。
string text = "あした";
DateTime date;
if (DateTime.TryParse(text, out date))
{
Console.WriteLine("変換成功: " + date);
}
else
{
Console.WriteLine("日付として認識できませんでした。");
}
このようにTryParseを使うことで、入力ミスなどがあっても安全に処理を続けることができます。
5. 時刻を含む文字列をパースする方法
日付だけでなく、時刻(時間)を含む文字列も同じようにパースできます。「2025/02/01 14:30:00」のような文字が渡された場合も、C#は正確に変換することができます。
string text = "2025/02/01 14:30:00";
DateTime dateTime = DateTime.Parse(text);
Console.WriteLine(dateTime);
このように、日付と時刻のどちらも含む文字列でも問題なく日時として扱えるようになります。
まとめ
今回の記事では、C#プログラミングにおいて避けては通れない「文字列から日時への変換(パース)」について詳しく解説してきました。プログラムの世界では、画面からの入力値やファイル内のデータは基本的に「文字列」として扱われます。しかし、日付の計算をしたり、過去か未来かを比較したりするためには、それらを「DateTime型」という専用の形式に変換しなくてはなりません。
C#の日時パースにおける3つの主要メソッド
用途に合わせて使い分けることが、バグの少ないスムーズな開発への第一歩です。ここで改めて、紹介した3つの手法を整理しておきましょう。
- DateTime.Parse: 標準的な書式(/や-区切りなど)を自動で判別して変換してくれる、最も手軽な方法です。
- DateTime.ParseExact: 「yyyyMMdd」のような特殊な形式や、厳密な書式チェックが必要な業務システムなどで威力を発揮します。
- DateTime.TryParse: ユーザーの入力ミスなど、不正な文字列が混じる可能性がある場合に「例外(エラー)」を出さずに安全に処理を分岐できます。
実践的な応用例:和暦や特定のカルチャを扱う
日本のシステム開発では、西暦だけでなく「令和」などの和暦を扱うケースも少なくありません。C#では、CultureInfoクラスを組み合わせることで、多種多様なフォーマットに対応可能です。パースの基本をマスターすれば、世界のどこで使われるアプリでも日付を正確に管理できるようになります。
また、パースした後のDateTimeオブジェクトを使えば、AddDaysメソッドで「30日後」を求めたり、DayOfWeekプロパティで「曜日」を判定したりすることも簡単です。単なる文字の羅列が、意味を持った「情報」へと変わる瞬間こそが、プログラミングの醍醐味と言えるでしょう。
サンプルプログラム:パースの応用と計算
学んだ内容を活かして、文字列から日付を取り込み、その日付が現在から見てどれくらい先なのかを計算する応用プログラムを見てみましょう。
using System;
using System.Globalization;
class Program
{
static void Main()
{
// 1. 様々な形式の文字列
string dateString1 = "2026-01-31";
string dateString2 = "2026/12/25 18:00:00";
// 2. Parseを使った基本的な変換
DateTime parsedDate1 = DateTime.Parse(dateString1);
Console.WriteLine($"変換結果1: {parsedDate1:yyyy年MM月dd日}");
// 3. TryParseを使った安全な変換と計算
if (DateTime.TryParse(dateString2, out DateTime parsedDate2))
{
TimeSpan diff = parsedDate2 - DateTime.Now;
Console.WriteLine($"変換結果2: {parsedDate2}");
Console.WriteLine($"現在からの差分: 約{Math.Floor(diff.TotalDays)}日です。");
}
// 4. ParseExactで特定のフォーマットを指定(秒なしの形式など)
string customInput = "20260505";
DateTime holiday = DateTime.ParseExact(customInput, "yyyyMMdd", CultureInfo.InvariantCulture);
Console.WriteLine($"カスタム変換: {holiday.ToLongDateString()}");
}
}
実行結果は以下のようになります。現在の時刻設定によって差分の数値は変わりますが、文字が計算可能な数値(時間幅)に変わっていることがわかります。
変換結果1: 2026年01月31日
変換結果2: 2026/12/25 18:00:00
現在からの差分: 約328日です。
カスタム変換: 2026年5月5日火曜日
プログラミング初学者のうちは「なぜわざわざ型を変える必要があるのか」と疑問に思うこともあるかもしれません。しかし、大規模なシステムになればなるほど、型の厳密さがプログラムの安定性を支える鍵となります。今回学んだDateTime.Parseをきっかけに、C#の強力な型システムに慣れていきましょう。
生徒
「先生、ありがとうございました!文字列をDateTime型に変えるだけで、日付の引き算までできるようになるなんて驚きました。ただの文字だと思っていたものが、急にカレンダーとして動き出した感覚です!」
先生
「その感覚、すごく大事ですよ。プログラムにとって、型は『そのデータが何者であるか』を示す身分証明書のようなものです。DateTime型にすることで、曜日を調べたり、うるう年を判定したりといった高度な機能が使えるようになるんです。」
生徒
「さっきのTryParseは、もし変な文字……例えば『あいうえお』とかが入ってきても、画面が真っ赤になって止まったりしないための守りになるんですね?」
先生
「その通り!不特定多数の人が使うアプリでは、どんな入力が来るか予想できませんからね。TryParseを使いこなせれば、ユーザーに優しい『壊れにくいソフト』が作れるようになります。次は、変換した日付を好きな形式で表示する『ToString』についても学んでみると、もっと表現の幅が広がりますよ。」
生徒
「なるほど、次は表示のカスタマイズですね。まずはこのパースをしっかりマスターして、自分の家計簿アプリに入力機能を付けてみます!」