web-dev-qa-db-ja.com

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

DotNetとC#は初めてです。 mm/dd/yyyyフォーマットの文字列をDateTimeオブジェクトに変換したいです。私は以下のように解析関数を試しましたが、それはランタイムエラーを投げています。

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

どのようにしてdatetimeに変換するのですか?

89
Fawad Shah

DateTime.ParseExact"dd/MM/yyyy"という形式で使用する必要があります。

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

フォーマットにd/M/yyyyを使用した方が安全です。それは1桁と2桁の日/月の両方を処理するからです。あなたが一桁/二桁の値を期待しているかどうかしかしそれは本当に異なります。


あなたの日付フォーマットday/Month/Yearは、文化によっては許容できる日付フォーマットかもしれません。たとえば、カナダの文化の場合、en-CADateTime.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 をご覧ください。


もう1つの解析方法は 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 FrameworkのメソッドのTryParseグループは無効な値に対して例外をスローしません。代わりに、それらは解析の成功または失敗を示すbool値を返します。

私は日と月にそれぞれ単一のdMを使ったことに注意してください。 Single dMは、1桁/ 2桁の日と月の両方で機能します。そのためd/M/yyyyフォーマットの有効値は次のようになります。

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

さらに読むために、あなたは見るべきである: カスタムの日付と時刻のフォーマット文字列

232
Habib

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)
11
John Woo

"dd/MM/yyyy" で使うためにDateTime.ParseExactフォーマットを使うことができます。

指定されたフォーマットおよびカルチャ固有のフォーマット情報を使用して、指定された日時のストリング表現をそれと等価なDateTimeに変換します。 文字列表現の形式は、指定された形式と正確に一致する必要があります。

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

これは DEMO です。

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

6
Soner Gönül