C#将日期从xml(可以按地点改变格式)转换为DateTime数据类型

时间:2016-09-20 08:46:03

标签: c# xml datetime

我需要从xml doc中以long(yyyy-MM-dd HH:mm:ss)和short(yyyy-MM-dd)格式从xml中提取日期时间。日期格式可能因地点而异,例如MM / dd / yyyy vs yyyy-mm-dd。

该应用程序在每个地方运行,因此将知道本地化的本地化。

问题:我该怎么做 1.使用本地日期格式从xml节点内部文本中提取日期 2.使用长格式或短格式提取日期,因为我可能不知道xml节点中提供了哪些日期

2 个答案:

答案 0 :(得分:3)

您可能对方法DateTime.TryParseExactDateTime.ParseExact感兴趣。然后创建一组允许的格式字符串并通过此集循环,以测试首先从最特定的格式解析日期:

var formats = new List<string>();
formats.Add("yyyy-MM-dd HH:mm:ss");
formats.Add("yyyy-MM-dd");
formats.Add("MM/dd/yyyy");
formats.Add("yyyy-mm-dd");

DateTime parsedDate;
foreach(var format in formats)
{
    if (DateTime.TryParseDate(str, format, CultureInfo.InvariantCulture,   DateTimeStyles.None, out parsedDate))
    {   
        break;
    }
}

已编辑:正确的格式为ISO 8601,如下所述:

What is the correct format to use for Date/Time in an XML file

如果不使用标准格式,则相似格式之间可能存在冲突,例如dd/MM/yyyyMM/dd/yyyy之间的某些区域都有效。

答案 1 :(得分:1)

正如Panagiotis Kanavos所建议的那样,xml中的日期应为ISO8601格式。这是一个例子:

string xmlInput =  @"
<root>
<element>
<timestamp time='2016-09-15T13:45:30'>
</timestamp>
</element>
<element>
<timestamp time='2016-10-16T13:45:30'>
</timestamp>
</element>
</root>";

XDocument  xdoc = XDocument.Parse(xmlInput);
var listOfDates = xdoc.Descendants("root").Elements("element").Select(x => DateTime.Parse(x.Element("timestamp").Attribute("time").Value,CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind)).ToList<DateTime>();
Console.WriteLine(listOfDates[0]);