2011-07-29 15 views
7

Después de que un cliente descargue un archivo de nuestro servidor con nuestra aplicación, la aplicación hace un ParseExact en una cadena de fecha que proviene del servidor en la forma: yyyy/mm/dd HH:mm:ss.Problema DateTime.ParseExact con Thai/Buddhist Era Time

Después de mucha confusión, noté en algunos registros que la fecha en el sistema de clientes era 19/7/2554. Como resulta, este es un momento válido como en Tailandia, Windows por defecto es el sistema de tiempo de la era budista, donde es el año 2554.

Mi análisis exacto se hace con una cultura invariante, que sospecho que puede ser el problema , pero pensé que la cultura se refería al formato que intentabas analizar.

El mensaje de excepción que recibo es: String no se reconoció como una válida DateTime porque el día de la semana era incorrecta

+0

Su formato no parece incluir el día de la semana en absoluto. ¿Puedes dar un ejemplo de la cadena que estás tratando de analizar y el código que está haciendo el análisis sintáctico? –

+0

De hecho, ¿está especificando una lista de formatos? – V4Vendetta

+0

Ah, chicos malos, lo arruiné. Resulta que se estaba ejecutando otra parte del código que yo ni siquiera sabía. Fue bastante difícil de depurar con solo un mensaje de excepción de un archivo de registro. Resulta que fue un error DateTime.Parse, no un parseexact. Pude replicar el problema cambiando la región de mi PC a Tailandia y ver exactamente dónde estaba muriendo. –

Respuesta

1

El CultureInfo también contiene la información del calendario. Si el método TryParseExact tiene acceso a la información de calendario correcta, entonces podrá analizar la fecha correctamente.

http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.calendar.aspx

Si reemplaza el CultureInfo InvariantCulture con el tailandés CultureInfo entonces se usará el calendario predeterminado para que la cultura.

Como alternativa, puede utilizar una sobrecarga del método TryParse que no requiere CultureInfo. La cultura que se utiliza en este caso dependerá de la configuración regional del usuario en Windows.