2010-02-10 11 views
14

Wenn ich eine Datetime-Zeichenfolge in einem seltsamen Format wie YYYY##MM##DD HH**M**SS habe, wie kann ich eine neue Datetime-Objekt-Basis darauf erstellen? Ich habe etwas über die Datetimeformatinfoclass gelesen, aber nicht sicher, wie es funktioniert ..Parse DateTime in C# aus seltsamen Format

Antwort

26

Sie können DateTime.ParseExact verwenden oder DateTime.TryParseExact für Daten, die Sie in beispielsweise nicht sicher sind:

using System; 

class Test 
{ 
    static void Main() 
    { 
     string formatString = "yyyy'##'MM'##'dd' 'HH'*'mm'*'ss"; 
     string sampleData = "2010##02##10 07*22*15"; 
     Console.WriteLine(DateTime.ParseExact(sampleData, 
               formatString, 
               null)); 
    } 
} 

die Anführungszeichen im Format-String sind nicht unbedingt notwendig - dies funktionieren wird. zu:

string formatString = "yyyy##MM##dd HH*mm*ss"; 

bedeutet jedoch, die Anführungszeichen sind Sie explizit zu sein, dass die Zeichen zwischen den Anführungszeichen sind buchstäblich verwendet werden, und nicht als Muster Zeichen verstanden - also, wenn Sie geändert „#“ auf „/“ Die Version mit Anführungszeichen würde definitiv "/" verwenden, während die ve rsion ohne würde einen kulturspezifischen Wert verwenden.

Die null im Aufruf von ParseExact bedeutet „die aktuelle Kultur nutzen“ - in diesem Fall ist es unwahrscheinlich, dass viel Unterschied, aber eine allgemein nützliche Alternative CultureInfo.InvariantCulture zu machen.

Es ist bedauerlich, dass es keine Möglichkeit gibt, die BCL zu veranlassen, die Formatzeichenfolge zu analysieren und die Information beizubehalten; Mein eigenes Noda Time Projekt korrigiert diese Situation, und ich hoffe, dass es das Parsen und Formatieren viel schneller macht - aber im Moment ist es bei weitem nicht produktionsbereit.

+2

http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx hat die relevante Analyse, wenn Sie Ihren eigenen formatString bereitstellen – Tanzelax

7

Sie können DateTime.ParseExact Methode verwenden und das Format übergeben, das Sie benötigen.

+0

Dies ist der effizienteste Weg, eine 'Zeichenkette' zu' DateTime' zu ​​parsen. Parsing mit '.Parse()' und '.TryParse()' ohne Format Info ist f..king verdammt langsam! –