Estoy obteniendo una String.FormatException intentando convertir/analizar una cadena cuando la cultura es distinta a la no estadounidense. Lo curioso es que la cadena fue generada al aplicar el mismo formato y cultura que los que se utilizan para analizar de nuevo en una cadena. En el código siguiente, todas estas versiones se producirá un error:String.FormatException con DateTime en cultura no estadounidense
const string culture = "ja-JP"; const string format = "dd MMM yyyy"; //error in orignal post included {0:} CultureInfo info = new CultureInfo(culture); Thread.CurrentThread.CurrentCulture = info; Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(culture); //string toParse = String.Format(info, format, DateTime.Now); //error in original post string toParse = DateTime.Now.ToString(format); System.Diagnostics.Debug.WriteLine(string.Format("Culture format = {0}, Date = {1}", culture, toParse)); try { DateTime output = DateTime.ParseExact(toParse, format, CultureInfo.InvariantCulture); //DateTime output = DateTime.ParseExact(toParse, format, info); //DateTime output = DateTime.ParseExact(toParse, format, info, DateTimeStyles.None); //DateTime output = Convert.ToDateTime(toParse, info); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.Message); }
Tenga en cuenta que la cadena de es-es "25 feb 2010". La cadena para ja-JP es "25 2 2010".
¿Alguna idea de cómo obtener "25 2 2010" de nuevo en una fecha?
Gracias de antemano.
Edit1: Debo señalar que la cultura japonesa está codificada aquí solo como un ejemplo. Realmente necesito que esto funcione con cualquier cultura que establezca el usuario. Lo que necesito es una solución donde el formato de fecha y hora funcione sin importar la cultura del usuario. Creo que el single M lo hace.
Editar 2: M no funciona para inglés. ¿Alguien sabe una cadena de formato que funciona para todas las culturas?
Si desea utilizar 'DateTime.ParseExact' con' CultureInfo.InvariantCulture', entonces sí, tiene razón. Sin embargo, si utiliza el cultivo de JP, no es necesario. –
Sí, buena observación de lo de {0:}: ese no era el último problema, pero era un error en mi script de prueba (ahora corregido). También intenté usar la cultura ja-JP durante el análisis: hay una serie de intentos allí. Solo fui a Invariant cuando eso no funcionaba. – sydneyos