0

JSON.NET の LINQ to JSON を使用して、日付を含むデータを解析しています。私のサンプル JSON は次のようになります。

{"2013" : [
    { "date":"2/5/2013 11:13 AM","id":23 }],
"2012" : [
    { "date":"28/9/2012 5:29 PM","id":24 }]
}

日付の形式は d/m/yyyy h:mm です。最初に DateTime.Parse を使用して解析してみました:

var postTitles = jobject.Children().SelectMany(x => x.First).
    Select(p =>
    new Report
        {
            Date = DateTime.Parse((string)p["date"]),
            Height = (int)p["height"]
        });

ただし、2 番目の日付で FormatException がスローされるため、代わりに DateTime.ParseExact を使用してみました。

var postTitles = jobject.Children().SelectMany(x => x.First).
    Select(p =>
    new Report
        {
            Date = DateTime.ParseExact(p["date"].ToString(), "dd/mm/yyyy hh:mm", new
                CultureInfo("en-US")),
            Height = (int)p["height"]
        });

今回は、初デートで FormatException を取得。この日付を解析する方法に代わるものはありますか? XML に慣れているので、拡張メソッドを使用してみましたが、拡張メソッドが認識されないようです。

4

1 に答える 1

4

のフォーマット文字列ParseExactが非常に壊れています。基本的に、実際のデータの形式に注意を払い、MSDN のドキュメントでカスタムの日付/時刻文字列を確認する必要があります。古いパターンをそのまま入れて、それが機能することを期待することはできません。データと一致する必要があります。

したがって、おそらく「d/M/yyyy h:mm tt」のフォーマット文字列が必要です。インバリアント カルチャを使用することもお勧めします。

Date = DateTime.ParseExact(p["date"].ToString(), "d/M/yyyy h:mm tt",
                           CultureInfo.InvariantCulture);

(不変の文化は米国の文化とほとんど同じですが、重要な側面は、これが純粋に米国中心のデータではなく、機械で生成されたデータを対象としていることを示していることです。)

JSON.NET でこれを行うためのより良い方法があるかもしれませんが、少なくともそれが出発点になるはずです。

于 2013-07-16T10:22:18.657 に答える