【问题标题】:Why isn't this value a valid DateTime object?为什么这个值不是有效的 DateTime 对象?
【发布时间】:2014-07-23 16:39:39
【问题描述】:

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

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

在这堂课中,我有以下说明:

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

此指令使用以下字段将 currentDeepSightVuln 对象的 Published 属性的值设置到 XML 文件中:

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

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

ex {"字符串未被识别为有效的日期时间,因为 周不正确。"} System.Exception {System.FormatException}

但是,如果我使用 Sep 19 2011 而不是 Mar 11 2014 值(在另一个我用作测试的 XML 文件中,我发现 2011 年 9 月 19 日)我也不例外,我的程序运行良好。

为什么 Mar 11 2014 值不如 DateTime 值?

我可以做些什么来解决这个问题?

Tnx

【问题讨论】:

  • 如果您将Mar 11 2014 更改为Sep 19 2011 会发生什么情况,您仍然会遇到同样的错误吗?
  • 您使用的当前线程 (UI) 文化是什么?
  • 如果你写 2014-03-11 会发生什么?
  • Andrea,您似乎在 2014 年 3 月 11 日在 XML 的 Published 标记中添加了一个额外的空格。你能再检查一下吗?
  • 我尝试复制此内容,但无法得到相同的错误,即使尝试不同的文化(尝试过意大利语、西班牙语、英国和美国英语 - 所有工作)。就像@Jesse 说的那样,这可能是一个文化问题,但如果不了解您的具体文化设置,就无法确定

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


【解决方案1】:

这对我有用:

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

【讨论】:

    【解决方案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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-21
      • 2017-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-02
      • 1970-01-01
      相关资源
      最近更新 更多