4

以下の日付文字列をDateTimeオブジェクトに変換することは可能ですか?

"Friday 31 August 2012";
"26-Jul-2012"
"190811"

私はこの形で試しました:

DateTime.TryParse("Friday 31 August 2012"
                , CultureInfo.InvariantCulture.NumberFormat
                , DateTimeStyles.None
                , out tradeDate);

しかし、うまくいきません。

4

4 に答える 4

3

この文字列を正しい日時に変換することは可能ですか?"2012年8月31日金曜日"; 「2012年7月26日」「190811」

はい、特定の形式で日付を解析する場合は、DateTime.TryParseExactを使用する必要があります。いくつかの事前定義された形式を使用して日付の解析のみを試みるDateTime.ParseDateTime.TryParseを内部的に呼び出します。ドキュメントから:

DateTime.Parse(String)メソッドは、日付と時刻の値の文字列表現を同等のDateTimeに変換しようとします。解析される文字列は、次のいずれかの形式をとることができます。

  • 日付と時刻のコンポーネントを含む文字列。

  • 日付はあるが時間コンポーネントがない文字列。

  • 時間はあるが日付コンポーネントがない文字列。

  • タイムゾーン情報を含み、ISO 8601に準拠する文字列。たとえば、次の2つの文字列の最初の文字列は、協定世界時(UTC)を示します。2番目は、UTCより7時間早いタイムゾーンの時刻を指定します。

    2008-11-01T19:35:00.0000000Z

    2008-11-01T19:35:00.0000000-07:00

  • GMT指定子を含み、RFC1123時間形式に準拠する文字列。例えば:

    Sat, 01 Nov 2008 19:35:00 GMT

  • タイムゾーンオフセット情報とともに日付と時刻を含む文字列。例えば:

    03/01/2009 05:42:00 -5:00

これらのメソッドを提供しない場合、現在のスレッドから取得したカルチャ情報の種類に注意することが重要です。明示的に設定していない場合は、マシンのカルチャ情報になる傾向があります。したがって、解析しようとしている日付がその特定のカルチャのものである場合、それらはほとんどの場合、正常に解析されます。たとえば、私のデフォルトのカルチャはen-GBであるため、両方"Friday 31 August 2012"/"26-Jul-2012"解析を使用しますが、失敗します(すべてのカルチャで想像します)システムで認識される日付形式ではないためです。したがって、なぜより信頼性が高いのですか。TryParse"190811"TryParseExact

于 2012-12-11T10:53:42.823 に答える
2

ParseExactの形式がわかっている場合は、その形式を使用する必要がありますDateTime

したがって、「2012 年 8 月 31 日金曜日」を解析するには

DateTime tradeDate =
DateTime.ParseExact("Friday 31 August 2012", "dddd dd MMMM yyyy", CultureInfo.InvariantCulture);

"dddd dd MMMM yyyy"この形式には配列のオーバーロードも含まれているため、解析のニーズに合わせて複数の代わりに指定できます。

似たような

于 2012-12-11T10:59:51.270 に答える
1

DateTime.TryParseExact適切な形式で使用できます。

string[] dateStrings = new[] { "Friday 31 August 2012", "26-Jul-2012", "190811"};
DateTime date = DateTime.MinValue;
string[] formats = new[] { "dddd dd MMMM yyyy", "dd-MMM-yyyy", "ddMMyy" };
IEnumerable<DateTime> dates = dateStrings
    .Where(ds => DateTime.TryParseExact(ds
        , formats
        , CultureInfo.InvariantCulture
        , DateTimeStyles.None
        , out date))
    .Select(ds => date);

カスタムの日付と時刻の書式文字列

サンプルデータを使用したデモ

于 2012-12-11T10:59:57.617 に答える
0

TryParseExactフォーマット文字列の配列を使用および指定します。

DateTime.TryParseExact("Friday 31 August 2012"
                , new string[] {"dddd dd MMMM yyyy", "dd-MMM-yyyy", "ddMMyy"}
                , CultureInfo.InvariantCulture.NumberFormat
                , DateTimeStyles.None
                , out tradeDate);

MSDNのCustom Date and Time Format Stringsを読むことをお勧めします。

于 2012-12-11T10:58:56.163 に答える