c# - todatetime - ¿Qué pasa con DateTime.Parse(myString)?
format datetime parse c# (8)
Además de la entrada de usuarios desconocidos, el entorno puede ser desconocido ..., así que supongo que incluso si controlas el formato de entrada, lo que el análisis espera puede ser diferente.
Estaba hojeando la lista de preguntas de la Entrevista para desarrolladores de Scott Hanselman, y encontré esta pregunta:
¿Qué pasa con DateTime.Parse (myString)?
Si bien sé que existen riesgos inherentes al analizar una cadena de formato u origen desconocido, ¿hay otras razones? ¿Es usar DateTime.ParseExact en su lugar? ¿Debería ser myString.ToString () primero?
Como MSDN lo pone:
Como el método Parse (cadena) intenta analizar la representación de cadena de una fecha y hora utilizando las reglas de formato de la cultura actual, intentar analizar una cadena en particular en diferentes culturas puede fallar o devolver resultados diferentes. Si se analizará un formato de fecha y hora específico en diferentes configuraciones regionales, utilice el método DateTime.Parse (String, IFormatProvider) o una de las sobrecargas del método ParseExact y proporcione un especificador de formato.
Esa pregunta es solo para ver si el desarrollador conoce los problemas con eso. Primero debe usar TryParse porque Parse arroja una excepción si no se puede leer. Tampoco tiene en cuenta la configuración regional, por lo que en un escenario web, si un usuario británico escribe el 02/10/2008 y mi servidor usa una configuración regional en-EE, obtengo el 10 de febrero de 2008 en lugar del 2 de octubre de 2008.
Puede haber otros problemas, pero esos son los primeros dos que se me ocurrieron.
Mi reacción instintiva será que lo golpees con formatos / orígenes desconocidos. Puede haber otras razones, por ejemplo, desde esa única línea, ¿ sabemos que myString
es una cadena? (Supongo que lo es, por supuesto)
En general, recomiendo el método TryParse en su lugar. Es un poco más detallado, pero ayuda a evitar excepciones, siempre y cuando el código se comporte adecuadamente en el caso de una entrada no válida.
Por supuesto, basándote en tu redacción de esto ... supongo que ya sabías todo eso. :)
Usar la cultura de hilos actual en el sistema a menudo es una mala idea, ya que es "probar una variedad de formatos y ver si alguno de ellos funciona".
ParseExact con una cultura específica es un enfoque mucho más controlado y preciso. (Incluso si especifica la cultura actual, es más obvio para los lectores que eso es lo que está sucediendo).
esta publicación del blog lo explica , pero lo general es que no hay ningún cultureinfo asociado con el análisis.
La respuesta depende del código que rodea a DateTime.Parse (myString) y los requisitos del análisis
Es posible que ya tengas que verificar que la cadena sea un formato válido basado en una expresión regular y que no te interese la información cultural. También puede saber que los datos provienen de un formato de archivo conocido con una convención de fecha conocida, por lo que arrojar una excepción puede ser exactamente lo que se desea.
Sin contexto, la pregunta es bastante ambigua y la respuesta real debe ser "depende del contexto donde se usa el código en cuanto a qué es lo que está mal, si
Además, el problema de la configuración regional, DateTime.Parse()
también podría arrojar una excepción que luego tendría que atrapar. Use DateTime.TryParse()
o DateTime.TryParseExact()
lugar.