Conversión de la cadena con formato dd/mm/aaaa a Datetime

Soy nuevo en DotNet y C#. Quiero convertir una cadena en formato mm/dd/yyyy a un objeto DateTime. Intenté la función parse como abajo pero está lanzando un error en tiempo de ejecución.

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

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

Solución

Debe 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 utiliza d/M/aaaa para el formato, ya que eso manejará tanto un dígito como dos dígitos día/mes. Pero eso depende realmente de si se esperan valores de un solo dígito o de dos.


Su formato de fecha día/Mes/Año puede ser un formato de fecha aceptable para algunas culturas. Por ejemplo, para la cultura canadiense 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 funcionan porque el formato de la cadena es aceptable para la cultura en-CA. Dado que no está proporcionando ninguna cultura a su llamada DateTime.Parse, su cultura actual se utiliza para el análisis sintáctico que no soporta el formato de la fecha. Lee más sobre esto en DateTime.Parse.


Otro método para el análisis sintáctico es utilizar 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 lanza una excepción en caso de valores no válidos, en su lugar devuelve un valor bool que indica el éxito o el fracaso en el análisis.

**Observe que he utilizado "d" y "M" para el día y el mes respectivamente. La "d" y la "M" simples funcionan tanto para el día como para el mes de uno o dos dígitos. Así que para el formato d/M/yyyy los valores válidos podrían ser:

  • "24/01/2013"
  • "24/1/2013"
  • "4/12/2013" //4 de diciembre de 2013
  • "04/12/2013"

Para una mayor lectura debe ver: Cadenas de formato de fecha y hora personalizadas

Comentarios (3)

use DateTime.ParseExact

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

null utilizará la cultura actual, lo cual es algo peligroso. Intente suministrar una cultura específica

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

Puede utilizar el formato "dd/MM/yyyy"para utilizarlo en [DateTime.ParseExact`]1.

Convierte la representación de cadena especificada de una fecha y hora a su

DateTime equivalente utilizando el formato especificado y la información de formato específica de la cultura información sobre el formato. El formato de la representación de la cadena debe coincidir exactamente con el formato especificado. el formato especificado exactamente.

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

Aquí hay un DEMO.

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

Comentarios (0)