2012-09-18 6 views
7

Utilizzando la cultura Upper Sorbian (hsb) un oggetto DateTime convertito in una stringa utilizza il formato "d. M. yyyy H.mm.ss 'hodź.'". ToString ("G") per esempio restituisce "31. 12. 2011 5.06.07 hodź." per il 31. di dicembre 2011, 05:06:07..NET DateTime format/convert bug con upper Sorbian culture

Il problema è che provare a convertire una stringa di questo tipo in un DateTime non risulta vero. Anche stringhe più semplici come "1. 1. 2011" o "1.1.2011" non portano a risultati positivi. E nel caso qualcuno suggerisca di passare la cultura durante la conversione/persistenza: l'ho fatto naturalmente.

Cercando di analizzare "1.2.3" risultati nella data corrente con l'ora 01:02:03.

Ritengo un bug. O qualcuno sa cosa potrebbe essere sbagliato?

Sto usando .NET 4.5 RTM su una macchina RTM Windows 8.

Esempio:

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. Il tuo primo esempio funziona per me, da Windows 7 ma usando .NET 4.5 RTM. Potresti modificarlo in un'applicazione di console breve ma completa? –

+0

Il tuo commento indica alcune risposte corrette ma nessuna delle tue domande è contrassegnata come risposta. Sai che il controllo indica una risposta corretta. – Paparazzi

+0

@Jon: Sembra un problema su Windows 8 (Microsoft ha cambiato molti formati di data). Di seguito è riportato il codice dell'app della console semplificata ma funzionante: CultureInfo culture = new CultureInfo ("hsb"); DateTime date = new DateTime (2011, 12, 31, 5, 6, 7); stringa dateString = date.ToString ("G", cultura); 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); –

risposta

0

NET 4.5 "HSB" è contrassegnato cultura come neutro, quindi tutto DateTime analisi sarà fatto da provider di formato standard. Utilizzare DateTime.ParseExact con una stringa di formato. http://www.codeproject.com/Articles/3612/Use-of-different-Date-Time-formats-and-Culture-typ

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

ho trovato quando flag "IsNeutralCulture" in CultureInfo è uguale a "true", l'analisi della stringa di data in formati invarianti (en-US). Quando ho passato il formato MM/gg/aaaa DateTime.TryParse ha analizzato correttamente la data per cultura "hsb".

E alcuni citazione da un articolo, che ho fornito: ". Un DateTimeFormatInfo può essere creato solo per la cultura invarianti o per cultura specifica, non per una cultura neutra DateTimeFormatInfo eredita da Object e implementa ICloneable e interfacce IFormarProvider"

Ho trovato che DateTimeFormatInfo è specificato per la cultura "hsb", ma come ho detto prima, IsNeutralCulture = true. Mi aspetto in .Net framework 4.5 DateTimeFormatInfo non viene utilizzato per la data di analisi quando "IsNeutralCulture" è uguale a "true"

+0

Certo è "hsb" una cultura neutrale. Come è "en" o "de". Cosa intendi con "fornitore di formato standard". Anche per culture neutre viene utilizzato il fornitore di formato appropriato. Prova con qualsiasi cultura neutrale. Il problema non è come formattare le date però. Suppongo che la stringa risultante sia giusta per l'Alto sorabo. Il problema è che la data formattata non viene riconosciuta come una data quando si tenta di analizzarla. –