2016-09-20 152 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

請注意,我已經提供了問題中的日期格式。 –

相關問題