2010-02-10 2 views
14

se si dispone di una stringa datetime in un formato strano, ad esempio YYYY##MM##DD HH**M**SS, come posso creare una nuova base di oggetto datetime su tale? Ho letto qualcosa sul datetimeformatinfoclass ma non sono sicuro di come farlo funzionare ..Parse DateTime in C# da uno strano formato

risposta

26

È possibile utilizzare DateTime.ParseExact, o DateTime.TryParseExact per i dati che non siete sicuri nelle Ad esempio:

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

Le virgolette nella stringa di formato non sono strettamente necessari - questo funzionerà. troppo:

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

Tuttavia, utilizzando le virgolette significa che tu sia esplicita che i caratteri tra le virgolette devono essere utilizzati alla lettera, e non inteso come personaggi pattern - quindi se hai cambiato "#" per "/" la versione che usa le virgolette userebbe sicuramente "/" mentre la ve rsion senza usare un valore specifico della cultura.

Il null nella chiamata a ParseExact significa "usare la cultura corrente" - in questo caso è improbabile fare molta differenza, ma una valida alternativa comunemente è CultureInfo.InvariantCulture.

È spiacevole che non ci sia modo di ottenere il BCL per analizzare la stringa di formato e conservare le informazioni; il mio progetto Noda Time rettifica questa situazione e spero che renderà l'analisi e la formattazione molto più veloce, ma al momento non è ancora pronto per la produzione.

+2

http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx ha l'analisi corrispondente, se stai fornendo il tuo formatString – Tanzelax

7

È possibile utilizzare il metodo DateTime.ParseExact e passare il formato necessario.

+0

questo è il modo più efficiente di analizzare un 'stringa' in' DateTime'. l'analisi con '.Parse()' e '.TryParse()' senza informazioni sul formato è f..ingendo maledettamente lento! –