2009-10-16 11 views

Respuesta

11

Use el método DateTime.TryParse en lugar de usar sus propios bloques try/catch.

string text = "10/16/2009"; 
DateTime result; 

if (DateTime.TryParse(text, out result)) 
{ 
    // success, result holds converted value 
} 
else 
{ 
    // failed 
} 
+0

Gracias. Fuera de interés, ¿cuál es la diferencia? – John

+2

@John: la diferencia es que TryParse devolverá un valor booleano para indicar si el texto dado se pudo convertir a una fecha con éxito, en lugar de arrojar una excepción si falla. El uso de Parse arroja una FormatException, por lo que necesitaría usar un try/catch con ella. –

+0

Como nota adicional, todos los tipos BCL que proporcionan un método 'Parse' también proporcionan un método' TryParse'. –

2

Si sabe cuál será el formato de la fecha y hora, también se puede utilizar DateTime..::.TryParseExact Method

El DateTime.TryParse puede causar problemas cuando se utiliza con fecha 01/03/2009, tales como

¿Es 01 mar o 03 ene?

Preferiría recomendar que utilice algo que no sea un cuadro de texto, como un selector de fecha, o validar el cuadro de texto para que tenga algo como dd MMM aaaa. muy rara vez te equivocarías con eso.

1

Poco además de las respuestas anteriores:

Tiempo:

public static DateTime Parse(string s) 
{ 
    return DateTimeParse.Parse(s, DateTimeFormatInfo.CurrentInfo, DateTimeStyles.None); 
} 

public static bool TryParse(string s, out DateTime result) 
{ 
    return DateTimeParse.TryParse(s, DateTimeFormatInfo.CurrentInfo, DateTimeStyles.None, out result); 
} 

DateTimeParse:

internal static DateTime Parse(string s, DateTimeFormatInfo dtfi, DateTimeStyles styles) 
{ 
    DateTimeResult result = new DateTimeResult(); 
    result.Init(); 
    if (!TryParse(s, dtfi, styles, ref result)) 
    { 
     throw GetDateTimeParseException(ref result); 
    } 
    return result.parsedDate; 
} 

TryParse es mejor

Referencias:

Reflector

1

intente lo siguiente:

DateTime todate; 
if(!DateTime.TryParse("2009/31/01", todate)) 
{ 
//------------conversion failed-------------// 
} 
2

El mejor patrón a utilizar para el análisis de fecha y hora sería este

string DateFormat = "dd/MM/yyyy"; //Or any other format 
DateTime dateTime; 
bool success = DateTime.TryParseExact(value, DateFormat, 
     CultureInfo.InvariantCulture, 
      DateTimeStyles.None, 
       out dateTime); 

Nunca use DateTime.Parse e incluso DateTime.TryParse

Cuestiones relacionadas