now net example convert .net datetime parsing cultureinfo

.net - net - datetime now format



¿Por qué no puede DateTime.ParseExact() analizar "9/1/2009" con "M/d/aaaa" (7)

Apuesto a que la cultura de su máquina no es "en-US". De la documentación :

Si el proveedor es una referencia nula (Nothing en Visual Basic), se utiliza la cultura actual.

Si su cultura actual no es "en-US", esto explicaría por qué funciona para mí, pero no funciona para usted y funciona cuando especifica explícitamente que la cultura es "en-US".

Tengo una cadena que se ve así: "9/1/2009". Quiero convertirlo a un objeto DateTime (usando C #).

Esto funciona:

DateTime.Parse("9/1/2009", new CultureInfo("en-US"));

Pero no entiendo por qué esto no funciona:

DateTime.ParseExact("9/1/2009", "M/d/yyyy", null);

No hay palabra en la fecha (como "septiembre"), y conozco el formato específico, así que prefiero usar ParseExact (y no veo por qué se necesitaría CultureInfo). Pero sigo recibiendo la temida excepción "String no fue reconocido como un válido DateTime".

Gracias

Un pequeño seguimiento. Aquí hay 3 enfoques que funcionan:

DateTime.ParseExact("9/1/2009", "M''/''d''/''yyyy", null); DateTime.ParseExact("9/1/2009", "M/d/yyyy", CultureInfo.InvariantCulture); DateTime.Parse("9/1/2009", new CultureInfo("en-US"));

Y aquí hay 3 que no funcionan:

DateTime.ParseExact("9/1/2009", "M/d/yyyy", CultureInfo.CurrentCulture); DateTime.ParseExact("9/1/2009", "M/d/yyyy", new CultureInfo("en-US")); DateTime.ParseExact("9/1/2009", "M/d/yyyy", null);

Entonces, Parse () funciona con "en-US", pero no con ParseExact ... ¿Inesperado?


Establezca la propiedad Format de DateTimePicker en propiedades personalizadas y CustomFormat en M/dd/yyyy .


Lo probé en XP y no funciona si la PC está configurada en el tiempo internacional aaaa-Md. Coloque un punto de interrupción en la línea y antes de que se procese cambie la cadena de fecha para usar ''-'' en lugar del ''/'' y verá que funciona. No importa si tiene CultureInfo o no. Parece extraño poder especificar un formato probado solo para tener el separador ignorado.


Sospecho que el problema son las barras en la cadena de formato frente a las de los datos. Ese es un carácter separador de fecha sensible a la cultura en la cadena de formato, y el argumento final es null significa "usar la cultura actual". Si escapa de las barras diagonales ("M ''/'' d ''/'' yyyy") o especifica CultureInfo.InvariantCulture , todo estará bien.

Si alguien está interesado en reproducir esto:

// Works DateTime dt = DateTime.ParseExact("9/1/2009", "M''/''d''/''yyyy", new CultureInfo("de-DE")); // Works DateTime dt = DateTime.ParseExact("9/1/2009", "M/d/yyyy", new CultureInfo("en-US")); // Works DateTime dt = DateTime.ParseExact("9/1/2009", "M/d/yyyy", CultureInfo.InvariantCulture); // Fails DateTime dt = DateTime.ParseExact("9/1/2009", "M/d/yyyy", new CultureInfo("de-DE"));


Tratar :

Configurar en el archivo de configuración web

<system.web> <globalization culture="ja-JP" uiCulture="zh-HK" /> </system.web>

por ejemplo: DateTime dt = DateTime.ParseExact ("08/21/2013", "MM / dd / aaaa", nulo);

URL de referencia: http://support.microsoft.com/kb/306162/


Tratar

Date.ParseExact("9/1/2009", "M/d/yyyy", new CultureInfo("en-US"))


prueba esto

provider = new CultureInfo("en-US"); DateTime.ParseExact("9/1/2009", "M/d/yyyy", provider);

Adiós.