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"]
        });

但是,它会在第二个日期引发 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 回答