2016-09-20 70 views
2

我需要从xml中提取日期时间(yyyy-MM-dd HH:mm:ss)和short(yyyy-MM-dd)格式从一个XML文档。日期格式可能因地区而异。 MM/dd/yyyy vs yyyy-mm-dd。C#将日期从xml转换为DateTime数据类型

该应用程序在每个地区运行,因此将知道本地化是什么。

问:如何用无论是本地日期格式 2.提取使用长或短格式的日期,因为我可能不知道已经在提供了做我从XML节点内部文本 1.提取日期xml节点

+0

你是什么意思? XML数据包含具有“MM/dd/yyyy”值的文本字段? 'xs:date'和'xs:dateTime'类型使用ISO8601格式,因此您应该修复生成XML文件的代码。 .NET的DateTime对象没有格式,所以你不必处理本地化,直到你将值呈现为一个字符串,例如用于显示 –

+0

换句话说,XML中的特定于语言环境的日期字符串是必须手动的错误编码,因为.NET会正确序列化日期 –

+0

我不生成XML - 我明白了。我想提取日期,将它们加载到日期时间选择器中,以允许用户使用新日期更新日期,然后将它们保存为原来返回到xml中的格式。 –

回答

3

您可能感兴趣的方法DateTime.TryParseExactDateTime.ParseExact。然后创建一个组允许的格式字符串和循环throuh这套测试首先从最具体的格式解析日期:

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之间,这些格式在某些地区都是有效的。

+0

谢谢,这看起来很有趣......唯一的问题是,我会需要包括世界各地使用的主要格式... –

+1

*当且仅当*数据和客户端使用相同的语言环境时,使用简单的'DateTime.Parse'就足够了,因为它将使用客户端的语言环境。不需要'ParseExact'。所有解析函数还接受CultureInfo参数,该参数是指定区域设置的一种比实际手动编码格式更安全的方法 –

+0

XML不使用ISO格式。因此我的问题。我希望能够使用能够建立本地格式,然后指出日期是在dd/MM/yyyy或MM/dd/yyyy ...编辑:数据和客户端将在同一台机器上,所以相同的语言环境。 –

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]); 
+0

请注意,我已经提供了问题中的日期格式。 –

相关问题