Tengo una cadena que se ve así: "9/1/2009". Quiero convertirlo a un objeto DateTime (usando C#).¿Por qué no puede DateTime.ParseExact() analizar "9/1/2009" con "M/d/aaaa"
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 sé el formato específico, así que preferiría 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 poco de seguimiento. Aquí hay 3 métodos 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);
Así, Parse() trabaja con "en-US", pero no ParseExact ... ¿Inesperado?
¿Qué versión de .NET está usando? Cuando ejecuto la segunda línea anterior en PowerShell v2 en Win7, funciona bien. – Lee
Estoy usando .net 3.5 en xp. La cultura predeterminada es en-us. – Jimmy
En la cadena '" M/d/aaaa "', cada barra inclinada '/' se sustituye por la cadena 'culture.DateTimeFormat.DateSeparator'. Cuando le das 'null' como proveedor de formato, se utiliza la cultura actual. Ahora depende de si la cultura actual tiene '"/"' o alguna otra cadena (como '" - "' o '". "') Como su ['DateSeparator'] (http://msdn.microsoft.com/ en-us/library/system.globalization.datetimeformatinfo.dateseparator.aspx). –