この記事では、C#の日時文字列をDateTime型に変換する方法を解説します。
C#で開発をしていると、日時データを文字列で取得することはよくありますよね。
文字列をDatetimeに変換すれば、内部で日時の比較や変更などを簡単に行えるようになります。
また、表示フォーマットやタイムゾーンを変換をする際にも役立ちます。
以下のような場面で、当記事のテクニックを役立てられます。
- ユーザーが入力した日時情報を内部で処理したい
- 設定ファイル等の外部ファイルから取り込んだ日時を処理したい
- Web APIから受け取ったレスポンスを処理したい
- ログファイルを解析したい
そのまま使用できるサンプルコードも記載していますので、ぜひ活用してください!

時間を制するものは全てを制する。そう思いませんか
概要
日時の文字列をDateTime型に変換するには、DateTime構造体のメソッドを使用します。
具体的には、以下の4つのメソッドが挙げられます。それぞれの特徴を簡単にまとめてみました。
メソッド | 特徴 | 失敗時の動作 |
---|---|---|
Datetime.Parse | 標準的な日時形式を解析 | 例外をスロー |
Datetime.TryParse | 標準的な日時形式を解析 | falseを返す |
DateTime.ParseExact | 指定フォーマットで厳格に解析 | 例外をスロー |
DateTime.TryParseExact | 指定フォーマットで厳格に解析 | falseを返す |
次にサンプルコードとともに各メソッドの詳細を解説していきます。
サンプル
DateTime.Parseを使用する方法
以下はParseメソッドを使用したサンプルコードです。
サンプルコード
using System;
namespace SampleCode
{
class SampleCode
{
static void Main()
{
string strDt = "2025/03/03 01:23:45";
// DateTimeに変換
DateTime dt = DateTime.Parse(strDt);
// コンソールに出力
Console.WriteLine(dt.ToString("yyyy/MM/dd HH:mm:ss"));
Console.ReadKey();
}
}
}
実行結果
2025/03/03 01:23:45
Parseメソッドは標準的な日時形式であれば変換し、フォーマットが異なればエラーとして例外をスローします。
Parseメソッドはある程度自由な形式で文字列を解釈するため、意図しない変換が起こる可能性があります。不正なデータも正常として処理してしまう可能性があるため、指定フォーマット以外は受け付けないParseExactやTryParseExactを使うほうが安全といえます。
エラー時は例外がスローされますので、例外処理(try-catch)を忘れないようにしましょう。
DateTime.TryParseを使用する方法
以下はDateTime.TryParseを使用したサンプルコードです。
サンプルコード
using System;
namespace SampleCode
{
class SampleCode
{
static void Main()
{
string strDt = "2025/03/03 01:23:45";
DateTime dt;
// DateTimeに変換してコンソールに出力
if(DateTime.TryParse(strDt, out dt))
{
Console.WriteLine($"成功: {dt.ToString("yyyy/MM/dd HH:mm:ss")}");
}
else
{
Console.WriteLine(dt.ToString("失敗"));
}
Console.ReadKey();
}
}
}
実行結果
成功: 2025/03/03 01:23:45
TryParseメソッドは標準的な日時形式であれば変換できます。
変換に成功した場合はtrueを、失敗した場合はfalseを返します。
Parseメソッドと同様に、不正なデータも正常として処理してしまう可能性があるため、指定フォーマット以外は受け付けないParseExactやTryParseExactを使うほうが安全といえます。
DateTime.ParseExactを使用する方法
以下はDateTime.ParseExactを使用したサンプルコードです。
サンプルコード
using System;
using System.Globalization;
namespace SampleCode
{
class SampleCode
{
static void Main()
{
string strDt = "2025/03/03 01:23:45";
// 指定フォーマット
string format = "yyyy/MM/dd HH:mm:ss";
// DateTimeに変換
DateTime dt = DateTime.ParseExact(strDt, format, CultureInfo.InvariantCulture);
// コンソールに出力
Console.WriteLine(dt.ToString("yyyy/MM/dd HH:mm:ss"));
Console.ReadKey();
}
}
}
実行結果
2025/03/03 01:23:45
ParseExactメソッドは第1引数で指定した日時文字列を第2引数の指定フォーマットで変換します。
フォーマットが異なればエラーとして例外をスローします。
また、第3引数でカルチャ固有の書式情報を指定できます。nullの場合は現在のカルチャに対応するオブジェクトが使用されますので、特に指定がなければnullでも構いません。
ParseやTryParseメソッドと違って指定したフォーマット以外は受け付けない仕様ですので、不正なデータの誤った処理を防げます。
また、ParseやTryParseでは対応できない独自フォーマットの日時文字列でも変換が可能となります。
エラー時は例外がスローされますので、例外処理(try-catch)を忘れないようにしましょう。
DateTime.TryParseExactを使用する方法
以下はDateTime.TryParseExactを使用したサンプルコードです。
サンプルコード
namespace SampleCode
{
class SampleCode
{
static void Main()
{
string strDt = "2025/103/03 01:23:45";
// 指定フォーマット
string format = "yyyy/MM/dd HH:mm:ss";
// DateTimeに変換してコンソールに出力
if (DateTime.TryParseExact(strDt, format, CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime dt))
{
Console.WriteLine($"成功: {dt.ToString("yyyy/MM/dd HH:mm:ss")}");
}
else
{
Console.WriteLine("失敗");
}
Console.ReadKey();
}
}
}
実行結果
成功: 2025/03/03 01:23:45
TryParseExactメソッドは第1引数で指定した日時文字列を第2引数の指定フォーマットで変換します。
変換に成功した場合はtrueを、失敗した場合はfalseを返します。
第3引数ではカルチャ固有の書式情報を指定できます。nullの場合は現在のカルチャに対応するオブジェクトが使用されますので、特に指定がなければnullでも構いません。
第4引数ではDateTimeStyles列挙型を指定しますが、通常はサンプルと同じくDateTimeStyles.Noneで構いません。
ParseExactとの大きな違いはエラー時に例外をスローしない点ですので、不正なデータが含まれていた場合にどのような処理をしたいかで使い分けるとよいでしょう。
まとめ
以下は当記事のまとめです!
- 日時文字列をDateTimeに変換する方法は、Parse、TryParse、ParseExact、TryParseExactの4種類がある。
- ParseとTryParseは自動的に文字列を解析する分、意図しない変換を行う可能性がある。
- 安全に処理できるため、ParseExactかTryParseExactを使用するのがおすすめ。
当記事のサンプルを参考に、ぜひ日時文字列の変換を試してみてください!
DateTime型から文字列への変換方法(関連リンク)
DateTime型から文字列への変換方法を知りたい方は以下の記事をご参照ください!
コメント