使用JSON.NET分析日期

本文关键字:日期 NET JSON 使用 | 更新日期: 2023-09-27 18:22:38

我正在使用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进行解析。解析:

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,但我的扩展方法似乎没有被识别。

使用JSON.NET分析日期

ParseExact的格式字符串已损坏。基本上,您确实需要注意实际数据的格式,并查看MSDN文档中的自定义日期/时间字符串。你不能只把任何旧模式放进去就指望它能起作用:它必须与你的数据相匹配。

因此,您可能需要一个格式字符串"d/M/yyyy-h:mm-tt"。我还建议使用不变文化:

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

(不变文化与美国文化基本相同,但重要的是,它表明这是针对机器生成的数据,而不是真正以美国为中心的数据。)

在JSON.NET中可能有更好的方法来实现这一点,但这至少应该是一个起点。