使用Convert.ToDateTime将字符串转换为DateTime

时间:2013-02-11 15:49:01

标签: c# xml xml-parsing

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

<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只是不起作用。它给出了一个错误:

  

“字符串未被识别为有效的DateTime”

(这是我对德语的翻译,所以也许错误可能会有所不同。那里发生了什么?我希望我犯了一些愚蠢的错误。

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

提前感谢有人回答。

3 个答案:

答案 0 :(得分: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处理比当前代码简单得多。

答案 1 :(得分:1)

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

请尝试使用此代码:

Convert.ToDateTime(value, CultureInfo.InvariantCulture.DateTimeFormat);

答案 2 :(得分:0)

有一个standard way to format date/time values in XML

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

您可以使用XmlConvert.ToDateTime Method

解析此格式
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");