2010-02-10 20 views
14

si tengo una cadena de fecha y hora en un formato raro, como YYYY##MM##DD HH**M**SS, ¿cómo puedo crear una nueva base de objetos de fecha y hora sobre eso? He leído algo sobre la fecha y hora de la clase desconocida pero no estoy seguro de cómo hacerlo funcionar.Parse FechaTiempo en C# desde el formato extraño

Respuesta

26

Puede utilizar DateTime.ParseExact o DateTime.TryParseExact de datos, que usted no está seguro en Por ejemplo:

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

las comillas en la cadena de formato no son estrictamente necesarios - esto va a funcionar. demasiado:

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

sin embargo, el uso de las comillas significa que estás siendo explícito de que los caracteres entre las comillas se van a utilizar, literalmente, y no se entiende como caracteres de patrones - por lo que si ha cambiado "#" a "/" la versión que use comillas definitivamente usaría "/" mientras que la rsion sin usaría un valor específico de la cultura.

El null en la llamada a ParseExact significa "utilizar la cultura actual" - en este caso, es poco probable que haga mucha diferencia, pero una alternativa útil es comúnmente CultureInfo.InvariantCulture.

Desafortunadamente, no hay forma de que el BCL analice la cadena de formato y retenga la información; Mi propio proyecto Noda Time rectifica esta situación, y espero que pueda analizar y formatear mucho más rápido, pero está lejos de estar listo para producción en este momento.

+2

http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx tiene el análisis relevante, si está proporcionando su propio formatString – Tanzelax

7

Puede usar el método DateTime.ParseExact y pasar el formato que necesita.

+0

esta es la forma más eficiente de analizar una 'cadena' a' DateTime'. el análisis con '.Parse()' y '.TryParse()' sin información de formato es f..king malditamente lento! –