Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用JSON.NET解析日期_C#_Json_Windows Phone_Json.net - Fatal编程技术网

C# 使用JSON.NET解析日期

C# 使用JSON.NET解析日期,c#,json,windows-phone,json.net,C#,Json,Windows Phone,Json.net,我使用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().Sel

我使用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一样,但我的扩展方法似乎无法识别。

您的
ParseExact
格式字符串非常糟糕。基本上,您确实需要注意实际数据的格式,并查看这些数据。你不能把任何旧的模式放进去然后期望它能工作:它必须与你的数据相匹配

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

Date = DateTime.ParseExact(p["date"].ToString(), "d/M/yyyy h:mm tt",
                           CultureInfo.InvariantCulture);
(不变文化基本上与美国文化相同,但重要的方面是它表明这是针对机器生成的数据,而不是真正以美国为中心的数据。)


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

您的
ParseExact
格式字符串非常糟糕。基本上,您确实需要注意实际数据的格式,并查看这些数据。你不能把任何旧的模式放进去然后期望它能工作:它必须与你的数据相匹配

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

Date = DateTime.ParseExact(p["date"].ToString(), "d/M/yyyy h:mm tt",
                           CultureInfo.InvariantCulture);
(不变文化基本上与美国文化相同,但重要的方面是它表明这是针对机器生成的数据,而不是真正以美国为中心的数据。)


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

您能告诉我有关字符串格式的信息吗?我很困惑,因为MSDN文档中的示例用法是用于ToString的。@CCCC:如果不知道您的困惑在哪里,很难给您任何进一步的启示。据我所知,格式说明符提取日期的特定部分,如月、日和年,这需要正确格式化的日期。我要做的是将JSON文件中的数据转换为格式正确的日期。@CCCC:格式说明符基本上描述了数据的格式。我刚刚注意到之前的一次编辑删除了示例格式-我已经恢复了该部分,但实际上您应该仔细阅读文档,查看您提供的格式与数据实际使用的格式。。。它们非常不同。很抱歉造成混淆,我在尝试处理其他数据以测试格式是否有问题时粘贴了错误的代码段。把它改成我原来用的。你能告诉我字符串的格式吗?我很困惑,因为MSDN文档中的示例用法是用于ToString的。@CCCC:如果不知道您的困惑在哪里,很难给您任何进一步的启示。据我所知,格式说明符提取日期的特定部分,如月、日和年,这需要正确格式化的日期。我要做的是将JSON文件中的数据转换为格式正确的日期。@CCCC:格式说明符基本上描述了数据的格式。我刚刚注意到之前的一次编辑删除了示例格式-我已经恢复了该部分,但实际上您应该仔细阅读文档,查看您提供的格式与数据实际使用的格式。。。它们非常不同。很抱歉造成混淆,我在尝试处理其他数据以测试格式是否有问题时粘贴了错误的代码段。更正为我原来使用的。