Mam małą aplikację na Androida, której używam do drukowania określonej daty w różnych formatach na podstawie ustawień regionalnych.Dlaczego java.text.DateFormat zwraca ten sam format daty dla en_US i en_GB w systemie Android?
Tu jest mój kod (używając java.text.DateFormat
):
Locale[] locales = {new Locale("en", "US"), new Locale("en", "GB"), new Locale("en", "AU"), new Locale("en", "NZ"), new Locale("en", "ZA")};
for(int i = 0; i < locales.length; ++i) {
Log.d(logKey, locales[i].toString() + " - " + DateFormat.getDateInstance(DateFormat.SHORT, locales[i]).format(Calendar.getInstance().getTime()));
}
wyjście z tego w ten sposób LogCat:
D/FormatPoC( 390): en_US - 4/27/12
D/FormatPoC( 390): en_GB - 4/27/12
D/FormatPoC( 390): en_AU - 4/27/12
D/FormatPoC( 390): en_NZ - 4/27/12
D/FormatPoC( 390): en_ZA - 4/27/12
Więc moje pytanie brzmi - dlaczego to wszystko to samo? W języku Java SE otrzymuję:
en_US - 4/27/12
en_GB - 27/04/12
en_AU - 27/04/12
en_NZ - 27/04/12
en_ZA - 2012/04/27
Tego właśnie można się spodziewać. Wiem, że mogę użyć android.text.format.DateFormat
, aby uzyskać poprawne wyniki w oparciu o bieżące ustawienia lokalizacji i daty w danym użytkowniku, ale to nie wyjaśnia, dlaczego użycie formatu java.text.DateFormat
w celu uzyskania formatu dla programowo określonego ustawienia nie zwróci prawidłowych wyników.
Dodatkowo, nie jest to tylko format SHORT
data - MEDIUM
i LONG
pokaż niespójności między Android i Java SE, jak również (tj Android zwraca ten sam format dla wszystkich 5 Locales I określono).
Przetestowałem to na 3 różnych urządzeniach (2.3 i 4.0) oraz na emulatorze (2.3 i 4.0), wszystkie z tymi samymi wynikami. Przetestowałem również przy użyciu Locale.US
i Locale.UK
tylko po to, aby zobaczyć, czy są one w jakiś sposób różne, ale wyniki są takie same.
Czy ktoś inny się na to natknął, czy wie, dlaczego tak się stało?
UPDATE: 2012-07-18
Wydaje się, że jest to problem z emulatora, jak również wiele urządzeń produkowane w USA. Korzystanie Dalvik Explorer:
https://play.google.com/store/apps/details?id=org.jessies.dalvikexplorer&hl=en
byłem w stanie zobaczyć, co system powróci do en_GB na różnych urządzeniach (w tym emulatora). Niektóre zwracają odpowiednie formaty, niektóre zwracają format en_US. Zakładam, że jest to po prostu kwestia tego, jakie zasoby formatowania są wbudowane w system operacyjny dla każdego urządzenia, chociaż to, że emulator zwraca złe formaty, a także wiele moich urządzeń wyprodukowanych w Stanach Zjednoczonych, zastanawiam się, co sądzą brytyjscy deweloperzy, lub jeśli widzieli ten problem.
Choć to dość dużo dokładnie to, co robię (z dodatkiem innych lokalizacjach), dałem mu strzał. Formaty w USA i Wielkiej Brytanii są takie same: "27 kwietnia 2012 r.". Spodziewałbym się, że brytyjski będzie "27 kwietnia 2012 roku". Pozostałe wydają się ważne, chociaż nie jestem ani Francuzem, ani Włochem, ani Japończykiem, więc nie jestem w 100% pewny. ;-) – mWillis
, ale jeśli uzyskujesz właściwy wynik, przeprowadź lokalizowanie jako 'Locale.ITALY' zamiast nowego Locale (" en "," GB "). –
Jak stwierdziłem w pytaniu, użyłem zarówno 'Locale.UK' i' new Locale ("en", "GB") '- są one takie same i zwracają niewłaściwy format. 'Locale.ITALY' nie wchodzi w zakres tego, co próbuję określić. – mWillis