为什么这个值不是有效的DateTime对象?

时间:2014-06-03 11:05:58

标签: c# .net datetime xpath xml-parsing

我是 XPath 中的新手,我遇到以下问题。

我正在开发一个读取XML文件的 C#类,并使用其字段的内容设置对象属性。

在本课程中,我有以下指示:

currentDeepSightVuln.Published = n_alertdocument.SelectSingleNode("./x:Published", nsmgr) == null ? DateTime.MinValue : DateTime.Parse(n_alertdocument.SelectSingleNode("./x:Published", nsmgr).InnerText);

此指令使用以下字段将 currentDeepSightVuln 对象的已发布属性的值设置为XML文件:

<x:Published>Mar 11 2014</x:Published>

因此,使用之前的值( 2014年3月11日),我的程序抛出以下异常:

  

ex {“字符串未被识别为有效的DateTime,因为当天   周不正确。“} System.Exception {System.FormatException}

但是,如果不使用 2014年3月11日值,我会使用 2011年9月19日(在我使用的另一个XML文件中作为测​​试,我发现2011年9月19日)我没有例外,我的程序工作正常。

为什么 2014年3月11日值不如 DateTime 值?

我该怎么做才能解决这个问题?

TNX

2 个答案:

答案 0 :(得分:2)

这对我有用:

DateTime.ParseExact("MAR 11 2014", "MMM dd yyyy", CultureInfo.InvariantCulture);

答案 1 :(得分:2)

我的第一个猜测是国际化/本地化。您的操作系统(和/或.NET Framework)可能安装了其他语言包。

例如,在意大利语中,我认为“Mar”是“Martedì”的缩写,意思是星期二。同样,在西班牙语中,“Mar”也是“Martes”的缩写,再次表示星期二。

我认为可能发生的事情是日期/时间的解释不确定要使用哪种语言环境,而且更不确定要使用哪种预定义格式。

您可以在XML字符串中包含完整的月份名称,并查看它是否有效:“2014年3月11日”。

但是,似乎您正在严格使用英语格式的日期/时间 - 为什么不强制解析方法查找单个/特定格式?与vvv answered类似,请参见下文:

string pattern = "MMM dd yyyy";
DateTime parsedDate;

if (DateTime.TryParseExact(dateValue, pattern, null, DateTimeStyles.None, out parsedDate))
{
    Console.WriteLine("Converted '{0}' to {1:d}.", dateValue, parsedDate);
}