2

我很沮丧。我在玩 xml 文件。所以这是我自动创建的 xml 文件:

<Files>
<Lists>
    <oList>
      <Object>
        <Name>test1</Name>
        <DateCreated>2/11/2013 4:35:05 PM</DateCreated>
        <DateDeadline>2/17/2013 12:00:00 AM</DateDeadline>
        <Reward>none</Reward>
        <Description>chocolate amedei 9</Description>
      </Object>
    </oList>
  </Lists>
</Files>

开头的许多起始元素必须在那里,因为我想稍后扩展文件。所以现在我想读取这个 xml 文件并创建一个类的对象(ThingsToDoObjects,它应该有一天会成为一个待办事项列表),它需要存储在 xml 文件中的参数。此对象应存储在列表中。所以这就是我到目前为止所拥有的:

XmlDocument xmlListDoc = new XmlDocument();
            xmlListDoc.Load(xmlFilePath);
            foreach (XmlNode xnode in xmlListDoc.SelectNodes("Files/Lists/oList/Object"))
            {
                string n = xnode.SelectSingleNode("Name").InnerText.ToString();
                DateTime c = Convert.ToDateTime(xnode.SelectSingleNode("DateCreated").InnerText.ToString());
                DateTime d = Convert.ToDateTime(xnode.SelectSingleNode("DateDeadline").InnerText.ToString());

                string r = xnode.SelectSingleNode("Reward").InnerText.ToString();
                string de = xnode.SelectSingleNode("Description").InnerText.ToString();
                ThingsToDoObjects NeuObject = new ThingsToDoObjects(n, c, d, r, de);
                o.Add(NeuObject);
            }

现在,当我调试时,会发生以下情况: n 创建得很好, c 创建得很好。但是 d 不起作用。它给出了一个错误:

“该字符串未被识别为有效的日期时间”

(那是我从德语翻译过来的,所以这个错误可能会被称为有点不同。那里发生了什么?我希望我只是犯了一些愚蠢的错误。

顺便说一句:我尝试了该ParseExactly()方法,但它也不起作用并给出了同样的错误。

在此先感谢所有回答的人。

4

3 回答 3

4

(我假设您不能更改 XML 格式本身。按照 dtb 的建议,使用标准格式会更好。

如果您有已知格式的文本,请使用DateTime.ParseExactDateTime.TryParseExact。如果您给它们正确的格式,它们将起作用。在这些情况下,我通常也使用不变的文化进行解析——你不希望用户文化的日期分隔符等把事情搞砸。在这种情况下,看起来您想要的格式字符串是"M/d/yyyy h:mm:ss tt".

示例代码:

using System;
using System.Globalization;

class Test
{
    static void Main()
    {
        string text = "2/17/2013 12:00:00 AM";
        string format = "M/d/yyyy h:mm:ss tt";
        DateTime value = DateTime.ParseExact(text, format,
                                             CultureInfo.InvariantCulture,
                                             DateTimeStyles.None);
        Console.WriteLine(value);
    }
}

如果可以的话,我也强烈建议使用 LINQ to XML。它将使您的 XML 处理比您当前的代码简单得多。

于 2013-02-11T15:51:58.490 回答
1

既然你提到从德语翻译,我会假设你在德国。您可能正在尝试将日期解析为“您”。我的意思是使用德国文化格式化程序 (dd/mm/yyyy) 解析日期,并且没有第 17 个月可以解析。

尝试改用这个:

Convert.ToDateTime(value, CultureInfo.InvariantCulture.DateTimeFormat);
于 2013-02-11T16:07:49.860 回答
0

有一种标准方法可以在 XML 中格式化日期/时间值

<DateCreated>2013-11-02T04:35:05</DateCreated>

您可以使用XmlConvert.ToDateTime 方法解析此格式:

DateTime result = XmlConvert.ToDateTime("2013-11-02T04:35:05",
                                        XmlDateTimeSerializationMode.Utc);

或者,更好的是,看看LINQ-to-XML并使用XElement to DateTime Explicit Conversion

DateTime result = (DateTime)obj.Element("DateCreated");
于 2013-02-11T15:54:03.477 回答