2009-09-28 21 views
5

Cómo convertir la cadena "28/09/2009" a DateTime en un formato específico? Ej: Quiero convertir "2009-09-28 17:30:40" a DateTime. Quiero convertir "28/09/2009 17:30:40" a DateTime. Quiero convertir "20090928 17:30:40" a DateTime.Cómo convertir una cadena a un formato de fecha y hora específico en C#?

Hay varios formatos posibles. He intentado esto:

string[] formats = new string[] {"yyyymmdd","yyyymmddThhmmss","yyyy/mm/dd hh:mm:ss","yyyy/mm/dd","yyyy-mm-dd hh:mm:ss","yyyy-mm-dd"}; 
IFormatProvider culture = new CultureInfo("en-US", true); 
DateTime formattedDate = DateTime.ParseExact(aDate, formats, culture, DateTimeStyles.None); 

En este ejemplo se produce una excepción con el mensaje "String no se reconoció como un DateTime válido".

¿Qué hay de malo en el código de arriba?

+0

Falai Brazuca! :) ¿Puede darnos un poco más de información sobre su escenario? ¿Recibe fechas en los tres formatos dentro del mismo contexto? –

+0

Fala aí .... Necesito leer un documento xml. En este documento hay cadenas que representan fechas. Pero estas fechas pueden estar en formatos múltiples. Tengo que identificar estos formatos y convertir las cadenas a DateTime. –

Respuesta

12

Ninguno de sus formatos pone el día primero, así: "dd/MM/yyyy".

También tenga en cuenta la letra mayúscula 'M', ya que la minúscula 'm' es para 'minutos'. Tienes un problema similar con tus horas; ya que todas sus muestras usan 24 horas, necesita una "H" mayúscula.

Su matriz de cadenas de formato debe tener este aspecto:

string[] formats = {"dd/MM/yyyy", "yyyy-MM-dd HH:mm:ss", "dd/MM/yyyy HH:mm:ss", "yyyyMMdd HH:mm:ss"}; 

Esos formatos coinciden exactamente con sus cadenas de ejemplo suministrados.

Además, es probable que desee utilizar la cultura invariante en lugar de en-US en este caso. De lo contrario, el carácter '/' en las cadenas de formato es realmente un separador de fechas específico de la cultura, que un usuario puede anular en su sistema local.

Por último, ya que está, obviamente, tiene problemas para adecuar las cadenas de texto hacia arriba, es posible que desee utilizar TryParseExact(), que funciona igual de análisis exacto pero utiliza un parámetro out en lugar de devolver el valor, de modo que pueda devolver un valor booleano para indicar el éxito o el fracaso en lugar de lanzar una excepción.

Véase la referencia completa de cadena de formato aquí:
http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx

Cuestiones relacionadas