2012-09-18 7 views
7

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. 
+0

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? –

+0

Usted indica algunas respuestas correctas, pero ninguna de sus preguntas está marcada como contestada. Usted sabe que el cheque indica una respuesta correcta. – Paparazzi

+0

@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); –

Respuesta

0

En .Net 4.5 "HSB" se marca la cultura como neutro, por lo que todo el análisis DateTime se llevará a cabo por el proveedor de formato estándar. Use DateTime.ParseExact con cadena de formato en su lugar. http://www.codeproject.com/Articles/3612/Use-of-different-Date-Time-formats-and-Culture-typ

===============================

encontré cuando el indicador "IsNeutralCulture" en CultureInfo es igual a "verdadero", analiza la cadena de fecha en formatos invariantes (en-US). Cuando pasé el formato MM/dd/aaaa DateTime.TryParse analizó la fecha correctamente para culture "hsb".

Y alguna cita del artículo que proporcioné: "Un DateTimeFormatInfo solo se puede crear para la cultura invariante o para una cultura específica, no para una cultura neutral. DateTimeFormatInfo hereda de Object e implementa las interfaces ICloneable y IFormarProvider."

Encontré que DateTimeFormatInfo se especifica para la cultura "hsb", pero como dije antes, IsNeuCulture = true. Espero en .Net Framework 4.5 DateTimeFormatInfo no se utiliza para la fecha de análisis cuando "IsNeutralCulture" es igual a "verdadero"

+0

Claro que es "hsb" una cultura neutral. Como es "en" o "de". ¿Qué quiere decir con "proveedor de formato estándar". Incluso para culturas neutrales se usa el proveedor de formato apropiado. Pruebe con cualquier cultura neutral. El problema no es cómo dar formato a las fechas. Supongo que la secuencia resultante es correcta para Sorbian Superior. El problema es que la fecha formateada no se reconoce como una fecha al intentar analizarla. –

Cuestiones relacionadas