2016-09-20 3 views
2

Ich muss Datumsangaben aus XML extrahieren sowohl lang (JJJJ-MM-TT HH: MM: SS) und kurz (JJJJ-MM-TT) Format aus einem XML-Dokument. Das Datumsformat kann von Ort zu Ort variieren, z. MM/TT/JJJJ gegen JJJJ-MM-TT.C# Konvertieren Sie das Datum von XML (das Format kann nach Ort variieren) zu DateTime-Datentyp

Die App wird in jedem Ort ausgeführt, damit Sie wissen, was die lokale Lokalisierung ist.

Frage: Wie kann ich 1. Extrakt stammt aus dem XML-Knoten inneren Text mit, was auch immer das lokale Datumsformat 2. Extrakt ist die Termine lange oder kurze Format gegeben mit, dass ich weiß nicht, was in der geliefert wurde, xml node

+0

Was meinst du? Dass die XML-Daten Textfelder mit "MM/TT/JJJJ" -Werten enthalten? Die Typen "xs: date" und "xs: dateTime" verwenden das ISO8601-Format, daher sollten Sie den Code, der die XML-Datei generiert, wahrscheinlich korrigieren. Die DateTime-Objekte von .NET haben kein Format, so dass Sie sich erst dann mit der Lokalisierung beschäftigen müssen, wenn Sie den Wert als String zB für die Anzeige rendern –

+0

Anders ausgedrückt, Gebietsschema-spezifische Datumszeichenfolgen in XML sind ein Fehler, der Hand sein muss -kodiert, da .NET Daten korrekt serialisiert –

+0

Ich erzeuge das XML nicht - ich bekomme es so wie es ist. Ich möchte die Daten extrahieren, sie in datetime pickers laden, um dem Benutzer zu ermöglichen, Daten mit neuen Daten zu aktualisieren, und sie dann in demselben Format zu speichern, in dem sie sich ursprünglich in dem XML befanden. –

Antwort

3

Sie könnten die Methoden DateTime.TryParseExact oder DateTime.ParseExact interessieren. Dann erstellen Sie throuh diesen Satz einen Satz von zulässigen Format-Strings und Schleife zu testen, das Datum aus den spezifischen Formaten analysieren zuerst:

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; 
    } 
} 

Edited: Das richtige Format ist ISO 8601, wie hier beschrieben:

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

Wenn das Standardformat nicht verwendet wird, kann ein Konflikt zwischen ähnlichen Formaten auftreten, z. B. zwischen dd/MM/yyyy und MM/dd/yyyy, die beide in einigen Regionen gültig sind.

+0

Danke, das sieht interessant aus ... das einzige Problem wäre, dass ich es tun würde Sie müssen auch die wichtigsten Formate enthalten, die auf der ganzen Welt verwendet werden. –

+1

* Wenn und nur wenn * die Daten und der Client das gleiche Gebietsschema verwenden, reicht ein einfaches 'DateTime.Parse' aus, da das Gebietsschema des Clients verwendet wird. Es besteht keine Notwendigkeit für 'ParseExact'. Alle Parse-Funktionen akzeptieren auch einen CultureInfo-Parameter, mit dem das Gebietsschema sicherer angegeben werden kann, als das Format –

+0

manuell zu codieren. Das XML-Format verwendet nicht das ISO-Format. Daher mein Problem. Ich hoffte, dass ich in der Lage sein würde, das lokale Format festzulegen, das dann anzeigen würde, ob das Datum in TT/MM/JJJJ oder MM/TT/JJJJ ... war. Bearbeiten: Daten und Client befinden sich auf demselben Computer, also demselben Gebietsschema. –

1

Wie von Panagiotis Kanavos vorgeschlagen, sollten die Daten in xml dem Format ISO8601 entsprechen. Hier ist ein Beispiel dafür:

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

Bitte beachten Sie, dass ich die Datumsformate in der Frage angegeben habe. –

Verwandte Themen