¿Cómo convertir una cadena a un formato DateTime específico en c #?

¿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.

Existen múltiples formatos posibles. Intenté 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); 

Este ejemplo lanza una excepción con el mensaje “La cadena no se reconoció como un DateTime válido”.

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

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

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

La matriz de cadenas de formato debería 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 muestra suministradas.

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 fecha específico de la cultura, que un usuario puede anular en su sistema local.

Finalmente, ya que obviamente tiene problemas para hacer coincidir las cadenas, es posible que desee usar TryParseExact() , que funciona igual que el análisis exacto, pero usa un parámetro de out lugar de devolver el valor, para que pueda devolver un valor booleano para indicar Éxito o fracaso en lugar de lanzar una excepción.

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