我需要从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节点中提供了哪些日期
答案 0 :(得分:3)
您可能对方法DateTime.TryParseExact
或DateTime.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/yyyy
和MM/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]);