Convertir dd / mm / aaaa cadena formateada en Datetime

Soy nuevo en DotNet y C #. Quiero convertir una cadena en formato mm/dd/yyyy en el objeto DateTime . Probé la función de análisis como a continuación, pero arroja un error de tiempo de ejecución.

 DateTime dt=DateTime.Parse("24/01/2013"); 

¿Alguna idea sobre cómo puedo convertirlo a datetime?

Necesita utilizar DateTime.ParseExact con el formato "dd/MM/yyyy"

 DateTime dt=DateTime.ParseExact("24/01/2013", "dd/MM/yyyy", CultureInfo.InvariantCulture); 

Es más seguro si usa d/M/yyyy para el formato, ya que manejará un solo dígito y dos dígitos día / mes. Pero eso realmente depende si está esperando valores de uno o dos dígitos.


Su formato de fecha day/Month/Year podría ser un formato de fecha aceptable para algunas culturas. Por ejemplo, para Canadian Culture en-CA DateTime.Parse funcionaría como:

 DateTime dt = DateTime.Parse("24/01/2013", new CultureInfo("en-CA")); 

O

 System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("en-CA"); DateTime dt = DateTime.Parse("24/01/2013"); //uses the current Thread's culture 

Ambas líneas anteriores funcionarían porque el formato de la cadena es aceptable para la cultura en-CA . Dado que no está suministrando ninguna cultura a su llamada DateTime.Parse , su cultura actual se utiliza para el análisis que no admite el formato de fecha. Lea más sobre esto en DateTime.Parse .


Otro método para analizar es usar DateTime.TryParseExact

 DateTime dt; if (DateTime.TryParseExact("24/01/2013", "d/M/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out dt)) { //valid date } else { //invalid date } 

El grupo de métodos TryParse en .NET Framework no arroja una excepción sobre los valores no válidos, sino que devuelve un valor bool que indica éxito o falla en el análisis.

Tenga en cuenta que he usado single d y M para el día y el mes, respectivamente. Single d y M funcionan para día y mes de un solo dígito o dos dígitos. Entonces, para el formato d/M/yyyy los valores válidos podrían ser:

  • “24/01/2013”
  • “24/1/2013”
  • “12/04/2013” // 4 de diciembre de 2013
  • “12/04/2013”

Para leer más, debería ver: cadenas de formato de fecha y hora personalizadas

use DateTime.ParseExact

 string strDate = "24/01/2013"; DateTime date = DateTime.ParseExact(strDate, "dd/MM/YYYY", null) 
  • DateTime.ParseExact

null usará la cultura actual, que es algo peligrosa. Intenta proporcionar una cultura específica

 DateTime date = DateTime.ParseExact(strDate, "dd/MM/YYYY", CultureInfo.InvariantCulture) 

Puede usar el formato "dd/MM/yyyy" para usarlo en DateTime.ParseExact .

Convierte la representación de cadena especificada de una fecha y hora en su equivalente de fecha y hora utilizando el formato especificado y la información de formato específica de la cultura. El formato de la representación de cadena debe coincidir exactamente con el formato especificado.

 DateTime date = DateTime.ParseExact("24/01/2013", "dd/MM/yyyy", CultureInfo.InvariantCulture); 

Aquí hay una DEMO .

Para obtener más información, consulte Custom Date and Time Format Strings