validar tryparseexact texto saber parse fecha example ejemplo convertir convert c# asp.net datetime date tryparse

tryparseexact - saber si un texto es fecha c#



Problema DateTime.TryParse con fechas del formato aaaa-dd-MM (7)

Tengo la siguiente fecha en formato de cadena "2011-29-01 12:00 am". Ahora intento convertir ese formato a fecha y hora con el siguiente código:

DateTime.TryParse(dateTime, out dt);

Pero siempre estoy recibiendo dt como {1/1/0001 12:00:00 AM}, ¿pueden decirme por qué? y cómo puedo convertir esa cadena a la fecha.

EDITAR: Acabo de ver a todos los mencionados para usar el argumento de formato. Mencionaré ahora que no puedo usar el parámetro de formato ya que tengo alguna configuración para seleccionar el formato de fecha personalizado que el usuario desea y, en base a ese usuario, puedo obtener la fecha en el cuadro de texto en ese formato automáticamente a través de jQuery datepicker.


Desde DateTime en msdn:

Tipo: System.DateTime% Cuando este método retorna, contiene el valor de DateTime equivalente a la fecha y hora que figura en s, si la conversión fue exitosa , o MinValue si la conversión falló . La conversión falla si el parámetro s es nulo, es una cadena vacía ("") o no contiene una representación de cadena válida de una fecha y hora. Este parametro se pasa sin inicializar.

Utilice parseexact con la cadena de formato "yyyy-dd-MM hh:mm tt" lugar.


Eso funciona:

DateTime dt = DateTime.ParseExact("2011-29-01 12:00 am", "yyyy-dd-MM hh:mm tt", System.Globalization.CultureInfo.InvariantCulture);


Esto debería funcionar de acuerdo con su ejemplo "2011-29-01 12:00 am"

DateTime dt; DateTime.TryParseExact(dateTime, "yyyy-dd-MM hh:mm tt", CultureInfo.InvariantCulture, DateTimeStyles.None, out dt);


Intenta usar el método seguro TryParseExact

DateTime temp; string date = "2011-29-01 12:00 am"; DateTime.TryParseExact(date, "yyyy-dd-MM hh:mm tt", CultureInfo.InvariantCulture, DateTimeStyles.None, out temp);


Necesita usar el método ParseExact . Esto toma una cadena como segundo argumento que especifica el formato en que se encuentra la fecha y hora, por ejemplo:

// Parse date and time with custom specifier. dateString = "2011-29-01 12:00 am"; format = "yyyy-dd-MM h:mm tt"; try { result = DateTime.ParseExact(dateString, format, provider); Console.WriteLine("{0} converts to {1}.", dateString, result.ToString()); } catch (FormatException) { Console.WriteLine("{0} is not in the correct format.", dateString); }

Si el usuario puede especificar un formato en la interfaz de usuario, entonces necesita traducirlo a una cadena que puede pasar a este método. Puede hacerlo permitiendo que el usuario ingrese la cadena de formato directamente, aunque esto signifique que es más probable que falle la conversión, ya que ingresará una cadena de formato no válida, o teniendo un cuadro combinado que los presenta con las opciones posibles y usted configura las cadenas de formato para estas opciones.

Si es probable que la entrada sea incorrecta (por ejemplo, la entrada del usuario), sería mejor usar TryParseExact lugar de excepciones para manejar el caso de error:

// Parse date and time with custom specifier. dateString = "2011-29-01 12:00 am"; format = "yyyy-dd-MM h:mm tt"; DateTime result; if (DateTime.TryParseExact(dateString, format, provider, DateTimeStyles.None, out result)) { Console.WriteLine("{0} converts to {1}.", dateString, result.ToString()); } else { Console.WriteLine("{0} is not in the correct format.", dateString); }


Si le da al usuario la oportunidad de cambiar el formato de fecha / hora, tendrá que crear una cadena de formato correspondiente para usar en el análisis. Si conoce los posibles formatos de fecha (es decir, el usuario tiene que seleccionar de una lista), esto es mucho más fácil porque puede crear esas cadenas de formato en tiempo de compilación.

Si permite que el usuario realice un diseño en formato libre del formato de fecha / hora, entonces deberá crear las cadenas de formato DateTime correspondientes en tiempo de ejecución.


DateTime dt = DateTime.ParseExact("11-22-2012 12:00 am", "MM-dd-yyyy hh:mm tt", System.Globalization.CultureInfo.InvariantCulture);