2014-10-09 13 views
5

Oto dziwny dla ciebie..ToShortDateString zwraca inny format kulturowy niż oczekiwano.

Mamy C# interfejs, który działa od początku roku bez problemu na komputerze z Windows XP (32-bit). Właśnie zaktualizowaliśmy komputer do systemu Windows 7 (64-bitowego) z aplikacjami zainstalowanymi przez SCCM.

Przy ostatnim uruchomieniu daty w polu tekstowym zaczęły pojawiać się w formacie amerykańskim (5/2/2014) zamiast w formacie brytyjskim (02/05/2014).

kod, który jest używany:

string Lines = FromFormat.Text + " from " + FromFormat.Charge_From.ToShortDateString() + " to " + FromFormat.Charge_To.ToShortDateString() +"."; 

przypadku FromFormat celem ze źródła danych Charge_From & Charge_To DATATIME są zmienne.

Sprawdziliśmy ustawienia regionalne w komputerze oraz stworzył mały test aplikacji do wyświetlania ustawienia komputera z .NET oba te są określone jako formatów brytyjskich kod dla aplikacji testowej:

label1.Text = DateTime.Now.ToString(); 
label2.Text = DateTime.Now.ToString("dd MMM yyyy"); 
label3.Text = DateTime.Now.ToShortDateString(); 
label4.Text = Thread.CurrentThread.CurrentCulture.EnglishName; 

wiem, że Mogę wymienić ToShortDateString() na ToString("dd/MM/yyyy"), aby wymusić prawidłowy format, ale moje pytanie brzmi: dlaczego tak się dzieje?

Czy ma to coś wspólnego z uaktualnieniem systemu Windows 7? lub SCCM?

Dzięki z góry

+0

Jaki jest twój "CurrentCulture"? Czy to jest 'en-GB' lub' en-US'? –

+0

_ "Wiem, że mogę zastąpić ToShortDateString() z ToString (" dd/MM/rrrr "), aby wymusić prawidłowy format" _ To nie jest poprawne, 'ToString (" dd/MM/rrrr ")' będzie również używaj separatora dat istniejącej kultury zamiast '/'. –

+0

O ile mogę powiedzieć, że wszystkie komputery używają en-GB – Tony

Odpowiedz

0

Po wielu testach i drapanie głowy myślimy znalazłem odpowiedź na to.

Podczas testów zauważyliśmy, że komputery PC, na których interfejs został zainstalowany za pomocą SCCM (tylko Windows 7), produkowały tekst w formacie US, ale te, które były za pośrednictwem Click Once bezpośrednio (głównie XP), produkowały tekst w formacie brytyjskim.

Dalsze testy potwierdziły, że jeśli zainstalowaliśmy komputer z systemem Windows 7, kliknij raz Gdy mamy tekst sformatowany w Wielkiej Brytanii.

Po wielu nieporozumieniach, zauważyliśmy, że gdy SCCM zainstalował interfejs, to instalował wersję RTM Przeglądarki raportów, ale kiedy Click Once instalował interfejs, została zainstalowana wersja przeglądarki Report Viewer z wersją SP1.

Zmieniliśmy SCCM, aby zainstalować Podgląd raportu SP1 i przetestowaliśmy nową wersję interfejsu SCCM i otrzymaliśmy daty w Wielkiej Brytanii.

Dlaczego wersja aplikacji Report Viewer wpłynęła na ustawienia kultury komputera lub na to, jak działa ToShortDateString(), nie mamy pojęcia, ale wydaje się, że to właśnie jest problem.

8

ToShortDateString method używa ShortDatePattern property który jest identyczny z "d" standard date and time format swojej CurrentCulture.

en-GB Obiekt kultury to ShortDatePattern Właściwość to dd/MM/yyyy.

Ale en-US Właściwość culture to ShortDatePattern to M/d/yyyy.

Dlatego nie zawsze można zastąpić ToShortDateString i ToString("dd/MM/yyyy"). Nie zawsze są takie same. I "/" Custom Format Specifier ma specjalne znaczenie jako Zastąp mnie aktualną kulturą lub separatorem daty określonej kultury.

Podejrzewam, że zmieniono ustawienia regionalne podczas procesu aktualizacji, dlatego metoda ToShortDateString generuje różne wyniki.

Ale ponieważ nie powiedziałeś nam CurrentCulture, nigdy nie wiemy, na czym polega problem prawdziwy jest ..

+0

Moja pierwsza myśl, że ustawienia regionalne się zmieniły, ale są ustawione na angielski (Wielka Brytania), który jest taki sam, jak ustawione są komputery XP. – Tony

+0

Dziwne jest to, że kiedy uruchamiamy program testowy na komputerach PC, informuje on, że komputer jest angielski (Wielka Brytania), ale po uruchomieniu interfejsu kilka sekund później zapisuje datę w formacie en-US. już odkryliśmy, że w Windows 7 jest wiele miejsc, w których ODBC są przechowywane/dostępne, czy jest coś podobnego w ustawieniach regionalnych? – Tony

+0

@Tony Więc twoją właściwością 'CurrentCulture' jest' en-GB'? Uruchom w swoim programie i zobacz. –

Powiązane problemy