dd/mm/yyyy形式の文字列をDatetimeに変換する

私はDotNetとC#の初心者です。mm/dd/yyyy形式の文字列をDateTime`オブジェクトに変換したいと思っています。以下のようなparse関数を試してみましたが、ランタイムエラーが発生してしまいます。

DateTime dt=DateTime.Parse("24/01/2013");

datetimeに変換するにはどうしたらいいのでしょうか?

ソリューション

フォーマット "dd/MM/yyyy" を持つ DateTime.ParseExact` を使用する必要があります。

DateTime dt=DateTime.ParseExact("24/01/2013", "dd/MM/yyyy", CultureInfo.InvariantCulture);

フォーマットに d/M/yyyy を使用すると、一桁の曜日と二桁の月の両方を扱うことができるので、より安全です。しかし、これは一桁と二桁の値を想定しているかどうかによります。


あなたの日付フォーマット day/Month/Year は、ある文化圏では受け入れられる日付フォーマットかもしれません。例えば、カナダ文化圏の en-CA では、DateTime.Parse は次のように動作します。

DateTime dt = DateTime.Parse("24/01/2013", new CultureInfo("en-CA"));

または

System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("en-CA");
DateTime dt = DateTime.Parse("24/01/2013"); //uses the current Thread's culture

上記の両方の行は,文字列のフォーマットが en-CA カルチャーに対応しているので動作します。DateTime.Parse`の呼び出しにカルチャを与えていないので,現在のカルチャは日付フォーマットをサポートしていない構文解析に使用されます。詳しくはDateTime.Parseをご覧ください。


もう一つの解析方法は,DateTime.TryParseExact`を使う方法です。

DateTime dt;
if (DateTime.TryParseExact("24/01/2013", 
                            "d/M/yyyy", 
                            CultureInfo.InvariantCulture, 
                            DateTimeStyles.None,
    out dt))
{
    //valid date
}
else
{
    //invalid date
}

.NetフレームワークのTryParseメソッド群は、無効な値に対して例外を投げるのではなく、解析の成功または失敗を示すbool値を返します。

日と月にそれぞれシングルのdMを使用していることに注意してください。シングルの dM は、一桁/二桁の曜日と月の両方に使えます。ですから、フォーマット d/M/yyyy に対して、有効な値は次のようになります。

  • "24/01/2013"
  • "24/1/2013"
  • "4/12/2013" //2013年12月4日
  • "04/12/2013"

詳しくは、こちらをご覧ください。カスタム日付・時刻フォーマット文字列をご覧ください。

解説 (3)

use DateTime.ParseExact.

string strDate = "24/01/2013";
DateTime date = DateTime.ParseExact(strDate, "dd/MM/YYYY", null)

null` は現在のカルチャを使用しますが、これはやや危険です。特定のカルチャを指定してみてください

DateTime date = DateTime.ParseExact(strDate, "dd/MM/YYYY", CultureInfo.InvariantCulture)
解説 (1)

DateTime.ParseExact][1]で使用する場合は、"dd/MM/yyyy"`形式を使用できます。

日時の指定された文字列表現を、指定されたフォーマットと文化を用いて 日時の指定された文字列表現を、指定されたフォーマットおよび文化固有のフォーマット情報を使用して、同等の DateTime に変換します。 指定されたフォーマットと文化固有のフォーマット情報を使用して**文字列表現のフォーマットは、指定されたフォーマットと 指定されたフォーマットと正確に一致する必要があります。

DateTime date = DateTime.ParseExact("24/01/2013", "dd/MM/yyyy", CultureInfo.InvariantCulture);

こちらはDEMOです。

より詳しい情報は、Custom Date and Time Format Stringsをご覧ください。

解説 (0)