3

さて、私はその日付を解析しようとしています

2013 年 5 月 10 日 002704

        var stt = "5/10/2013 002704";
        result = DateTime.ParseExact(stt, "dd-MM-yyyy HHmmss", CultureInfo.InvariantCulture);

しかし、私はこの例外を受け取ります

文字列は有効な DateTime として認識されませんでした。

ただし、このコードは時間のみを解析するために機能します*without date*

        var stt = "002704";
        result = DateTime.ParseExact(stt, "HHmmss", CultureInfo.InvariantCulture);

誰かがその問題を解決してくれることを願っています。事前に感謝します...

ヒント: これも失敗します

    var stt = "5/10/2013 002704";
    result = DateTime.ParseExact(stt, "dd/MM/yyyy HHmmss", CultureInfo.InvariantCulture);

それはうまくいきます!ここで私を助けてくれたすべての人に感謝します. また、次回はXY問題を考慮します:D。

4

4 に答える 4

5

ああ、あなたは正確な解析を行っていますがdd、 を渡していdます。入力文字列を に変更し、区切り文字で"05/10/2013 002704"使用していることを確認してください。/

var stt = "05/10/2013 002704";
result = DateTime.ParseExact(stt, "dd/MM/yyyy HHmmss", CultureInfo.InvariantCulture);

編集

申し訳ありませんが、電話をかけなければならず、考えを終えることができませんでした。を使用する代わりに、ddおそらくd. または31までの任意の数で機能し05/10/2013ます(質問のコメントで指摘されているように)。また、@DanJ は、このメソッドの使用例を参照する素晴らしいコメントを作成したと思います。

簡単に言えば、Parse* Exact *() を使用する場合は、提供する文字列が書式指定子と一致することを確認することをお勧めします。

先に進む場合はParseExact、次を使用する必要があります。

result = DateTime.ParseExact(stt, "d/MM/yyyy HHmmss", CultureInfo.InvariantCulture);
于 2013-05-09T23:36:38.080 に答える
3

次の 2 つの点が間違っています。

  1. 日が 1 桁の場合はdd先行が期待される月の日に使用しています。代わりに0使用してください。d
  2. 他の人が言ったように、あなたは-自分のフォーマットで使用していますが/、入力データで使用しています。
于 2013-05-09T23:37:06.240 に答える
2

「d」と「dd」、または「M」と「MM」のどちらにするかについて、なぜすべての議論があるのでしょうか。

あなたは皆、あなたのケーキを持って食べることができます!

それらはすべて有効なので、すべて有効なものとして扱ってください。許可された形式のARRAYを自分で作成し、それを DateTime.TryParseExact() に渡します。これらのケースはすべて、期待どおりに処理されます。

        DateTime result;
        var stt = "5/10/2013 002704";
        string[] formats = { "d/M/yyyy HHmmss", "dd/MM/yyyy HHmmss", "d/MM/yyyy HHmmss", "dd/M/yyyy HHmmss" };
        if (DateTime.TryParseExact(stt, formats, null, System.Globalization.DateTimeStyles.None, out result))
        {
            // ... do something with "result" in here ...
            Console.WriteLine(result.ToString());
        }
        else
        {
            // ... parse failed ...
        }
于 2013-05-10T02:33:26.730 に答える
2

最初に、-(dd-MM-yyyy) を含むフォーマット文字列で解析していますが、文字列には/(5/10/2013) が含まれています。

dもう一つは、そうではないddからでは5なく、日成分であるべきだということです05

  var stt = "5/10/2013 002704";
    result = DateTime.ParseExact(stt, "d/MM/yyyy HHmmss", CultureInfo.InvariantCulture);
于 2013-05-09T23:34:48.417 に答える