2012-09-18 9 views
7

Posługiwanie się kulturą Górnołużycki (hsb) obiekt DateTime przekonwertowany na ciąg znaków ma format "d. M. yyyy H.mm.ss" hodź. "". ToString ("G") na przykład zwraca "31. 12. 2011 5.06.07 hodź." na 31 grudnia 2011, 05:06:07..NET 4.5 Format daty/konwersji błędu z kulturą Górnołużycki

Problem polega jednak na tym, że próba przekonwertowania takiego ciągu z powrotem na DateTime nie jest prawdą. Nawet prostsze ciągi, takie jak "1. 1. 2011" lub "1.1.2011", nie przynoszą rezultatu. I na wszelki wypadek, gdyby ktoś sugerował przekazanie kultury podczas konwersji/persingu: zrobiłem to oczywiście.

Próba przeanalizowania "1.2.3" powoduje wyświetlenie aktualnej daty z czasem 01:02:03.

Uważam, że błąd. A może ktoś wie, co może być nie tak?

Używam .NET 4.5 RTM na komputerze z systemem Windows 8 RTM.

Próbka:

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. Twój pierwszy przykład działa dla mnie, z Windows 7, ale z wykorzystaniem .NET 4.5 RTM. Czy możesz zmienić to w krótką, ale kompletną aplikację konsolową? –

+0

Komentujący wskazują poprawne odpowiedzi, ale żadne z pytań nie są oznaczone jako odpowiedzi. Wiesz, że czek wskazuje poprawną odpowiedź. – Paparazzi

+0

@Jon: Brzmi jak problem w Windows 8 (Microsoft zmienił wiele formatów daty). Oto uproszczony, ale działający kod aplikacji konsoli: CultureInfo culture = new CultureInfo ("hsb"); DateTime date = new DateTime (2011, 12, 31, 5, 6, 7); string dateString = date.ToString ("G", kultura); DateTime skonwertowaneData; bool dateOkay = DateTime.TryParse (dataString, kultura, DateTimeStyles.AllowInnerWhite, out skonwertowanyData); Console.WriteLine (dateOkay); dateString = "1. 1. 2000"; dateOkay = DateTime.TryParse (dataString, kultura, DateTimeStyles.AllowInnerWhite, out skonwertowanyData); –

Odpowiedz

0

w .NET 4.5 "HSB" jest oznaczona jako kulturę neutralny, więc wszystko DateTime parsowanie zostanie wykonana przez dostawcę standardowego formatu. Zamiast tego użyj DateTime.ParseExact z ciągiem formatującym. http://www.codeproject.com/Articles/3612/Use-of-different-Date-Time-formats-and-Culture-typ

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

znalazłem kiedy flaga "IsNeutralCulture" w CultureInfo równa się "prawda", ciągi znaków daty są przechowywane w niezmiennych formatach (en-US). Kiedy przekazałem format MM/dd/yyyy DateTime.TryParse poprawnie przeanalizowałem datę dla kultury "hsb".

I niektóre cytaty z artykułu, które dostarczyłem: "DateTimeFormatInfo można utworzyć tylko dla kultury niezmiennej lub dla określonej kultury, a nie dla kultury neutralnej DateTimeFormatInfo dziedziczy z Object i implementuje interfejsy ICloneable i IFormarProvider."

Znalazłem, że DateTimeFormatInfo jest określone dla kultury "hsb", ale jak już powiedziałem wcześniej, IsNeutralCulture = true. Oczekuję w .Net framework 4.5 DateTimeFormatInfo nie używa do parsowania daty, kiedy "IsNeutralCulture" jest "prawdziwe"

+0

Oczywiście, że "hsb" jest kulturą neutralną. Tak jak "en" lub "de". Co masz na myśli mówiąc o "dostawcy standardowego formatu". Nawet w przypadku kultur neutralnych używa się odpowiedniego dostawcy formatu. Spróbuj z dowolną kulturą obojętną. Problem jednak nie polega na formatowaniu dat. Przypuszczam, że wynikowy ciąg jest odpowiedni dla Górnołużycki. Problem polega na tym, że sformatowana data nie jest rozpoznawana jako data, kiedy próbuje się ją przeanalizować. –