3

私のコードでは、dateTime を表す 2 種類の文字列を取得できます。

1."2013-09-05T15:55"

2."09-05T19:10"

有効な DateTime に変換するにはどうすればよいですか?

次のコードを試しましたが、2 番目の形式の例外がスローされます。

String departureDateStr = "09-05T19:10";  
DateTime dt = Convert.ToDateTime(departureDateStr);

2 番目のタイプの文字列を有効な DateTime に変換するにはどうすればよいですか? ある種の文字列操作が必要ですか?

どうも、

アミール

4

3 に答える 3

8

DateTime.TryParseExactには、複数の形式を配列として渡すことができるオーバーロードがあります。次に、各日付文字列が配列内のさまざまな形式と比較されるため、検索する形式を事前に知る必要はありません。

string d1 = "2013-09-05T15:55";
string d2 = "09-05T19:10";

string[] formats = new string[] { "yyyy-MM-ddTHH:mm", "MM-ddTHH:mm" };
List<string> dates = new List<string>() { d1, d2 };

foreach (string date in dates)
{
    DateTime dt;
    if (DateTime.TryParseExact(date, formats, CultureInfo.InvariantCulture, DateTimeStyles.None, out dt))
    {
        //dt successfully parsed
    }
}

TryParseExactまた、配列内のどのフォーマットも入力と一致しない場合、例外をスローする代わりに false を返します。

于 2013-09-01T09:36:56.350 に答える
1

これには DatetIme.ParseExact() メソッドを使用できます。DateTime指定された形式とカルチャ固有の形式情報を使用して、指定された日付と時刻の文字列表現を同等の形式に変換します。文字列表現の形式は、指定された形式と正確に一致する必要があります。

String departureDateStr = "09-05T19:10";
IFormatProvider provider = System.Globalization.CultureInfo.InvariantCulture;
string format = "MM-ddTHH:mm";
DateTime parsedDate = DateTime.ParseExact(departureDateStr, format, provider);

この変換が何度も必要な場合は、次のように拡張メソッドにすることもできます。

public static class StringExtensions
{
   public static DateTime ToDate(this string str)
   {
      IFormatProvider provider = System.Globalization.CultureInfo.InvariantCulture;
      string format = "MM-ddTHH:mm";
      return DateTime.ParseExact(str, format, provider);
   }
}
于 2013-09-01T09:36:10.253 に答える