2012-05-17 23 views
6

He creado una aplicación C# WinForms.DateTime comportamiento extraño

En mi ordenador las siguientes obras:

DateTime.ParseExact("13/05/2012", "dd/mm/yyyy", null) 

pero esto no:

DateTime.Parse("13/05/2012") 

En los equipos de mi cliente es al revés. Esto funciona:

DateTime.Parse("13/05/2012") 

pero esto no es así:

DateTime.ParseExact("13/05/2012", "dd/mm/yyyy", null) 

Los estados de error:

String was not recognized as a valid DateTime. 

no logró encontrar ninguna información en Internet sobre este problema. El programa usa .Net Framework 4 y es una aplicación x86. Ejecuto Windows 8 x64, el cliente ejecuta Windows 7 x64.

¿Alguien tiene una pista de por qué ocurre esto?

Gracias.

+2

Sospecho que hay una discrepancia relacionada con el formato de fecha y hora de CultureInfo de los sistemas, pero explique qué significa "no funciona". ¿Produce un error? ¿Cuál es el mensaje de error? –

+1

@DanJ Funciona para él, pero lo analiza como "13/05/2012" en la computadora del cliente cuando usa el método 'ParseExact'. Estoy de acuerdo en consultar CultureInfo. – SimpleVar

+4

Otra razón para estandarizar el formato ISO 'aaaa-MM-dd'. =) – MCattle

Respuesta

12

La razón por la que obtienes un comportamiento diferente en diferentes computadoras es porque se ejecutan con diferentes culturas. Pruebe a ejecutar esta línea de código en ambos equipos para ver si se da salida a algo diferente: (ideone)

System.Console.WriteLine(CultureInfo.CurrentCulture); 

de salida (ejemplo):

 
en-US 

La cultura especifica muchas cosas, una de las cuales es el separador de fecha . Si quieres un comportamiento coherente para todos los usuarios, intente especificar una cultura: (ideone)

CultureInfo cultureInfo = CultureInfo.InvariantCulture; // or whatever you prefer 
DateTime dateTime = DateTime.ParseExact("13/05/2012", "dd/MM/yyyy", cultureInfo); 

El código anterior supone que tiene estas instrucciones using:

using System; 
using System.Globalization; 
+4

'mm' es minutos, no meses, usted está buscando' MM'. Como muestra tu ejemplo. – Guvante

+0

@Guvante: Gracias, lo arreglé. –

+0

¡Funcionó como un encanto! ¡Muchas gracias! –

11

Tenga cuidado; en custom date and time format strings, el especificador mm representa "minutos", no "meses". Necesita usar MM durante meses.

DateTime.ParseExact("13/05/2012", "dd/MM/yyyy", CultureInfo.InvariantCulture) 
+0

¡No sabía esto, gracias! –