Utilizando la cultura sorba superior (hsb) un objeto DateTime convertido a una cadena usa el formato "d. M. aaaa H.mm.ss 'hodź.'". ToString ("G"), por ejemplo, devuelve "31. 12. 2011 5.06.07 hodź." para el 31 de diciembre de 2011, 05:06:07 AM..NET 4.5 formato DateTime/error de conversión con cultura sorba superior
El problema es que intentar convertir una cadena así a DateTime no resulta verdadero. Incluso cadenas más simples como "1. 1. 2011" o "1.1.2011" no tienen éxito. Y en caso de que alguien sugiera pasar la cultura al convertir/persistir: lo hice, por supuesto.
Intentando analizar "1.2.3" resultados en la fecha actual con el tiempo 01:02:03.
Considero que un error. ¿O alguien sabe lo que podría estar mal?
Estoy usando .NET 4.5 RTM en una máquina Windows 8 RTM.
muestra:
DateTime date = DateTime.Now;
CultureInfo culture = new CultureInfo("hsb");
string dateString = date.ToString("G", culture);
DateTime convertedDate;
bool dateOkay = DateTime.TryParse(dateString, culture,
DateTimeStyles.AllowInnerWhite, out convertedDate);
Console.WriteLine(dateOkay);
// This results false although the date string was read by
// ToString("G") (i.e. '20. 9. 2012 12.28.10 hodź.') and should be okay
dateString = "1. 1. 2000";
dateOkay = DateTime.TryParse(dateString, culture,
DateTimeStyles.AllowInnerWhite, out convertedDate);
Console.WriteLine(dateOkay);
// This results in false although the date string should be okay
dateString = "1.1.2000";
dateOkay = DateTime.TryParse(dateString, culture,
DateTimeStyles.AllowInnerWhite, out convertedDate);
Console.WriteLine(dateOkay);
// This results also in false
dateString = "1.2.3";
dateOkay = DateTime.TryParse(dateString, culture,
DateTimeStyles.AllowInnerWhite, out convertedDate);
Console.WriteLine(dateOkay + ": " + convertedDate);
// This results strangely in true. The converted date is the current date
// with time 01:02:03.
Hmm. Tu primer ejemplo funciona para mí, desde Windows 7 pero usando .NET 4.5 RTM. ¿Podría editar esto en una aplicación de consola corta pero completa? –
Usted indica algunas respuestas correctas, pero ninguna de sus preguntas está marcada como contestada. Usted sabe que el cheque indica una respuesta correcta. – Paparazzi
@Jon: Suena como un problema en Windows 8 (Microsoft cambió muchos formatos de fecha). Aquí está el código de la aplicación de consola simplificado pero en funcionamiento: CultureInfo culture = new CultureInfo ("hsb"); DateTime date = new DateTime (2011, 12, 31, 5, 6, 7); string dateString = date.ToString ("G", culture); DateTime convertedDate; bool dateOkay = DateTime.TryParse (dateString, culture, DateTimeStyles.AllowInnerWhite, out convertedDate); Console.WriteLine (dateOkay); dateString = "1. 1. 2000"; dateOkay = DateTime.TryParse (dateString, culture, DateTimeStyles.AllowInnerWhite, out convertedDate); –