Dla aplikacji java numer tygodnia jest ważny dla użytkownika końcowego. Jednak z jakiegoś powodu dla tej samej daty i lokalizacji numery tygodnia różnią się między moją maszyną a liczbą użytkowników końcowych.To samo ustawienie regionalne zapewnia różne numery tygodniowe dla tej samej daty na różnych komputerach.
Oboje uruchomić system Windows 10 i 64bit jre1.8.0_101
stworzyłem mały program do zilustrowania problemu, a to daje różne wyniki między obu maszynach.
Calendar calUs = Calendar.getInstance(Locale.US);
String usToday = "this week US: \t\t\t" + calUs.get(Calendar.WEEK_OF_YEAR) + " (should be 35 on 24-8-2016)";
Calendar calDe = Calendar.getInstance(Locale.GERMAN);
String deToday = "this week DE: \t\t\t" + calDe.get(Calendar.WEEK_OF_YEAR) + " (should be 34 on 24-8-2016)";
Calendar calDef = Calendar.getInstance();
String defToday = "this week default default: \t" + calDef.get(Calendar.WEEK_OF_YEAR)
+ " (should be 34 on 24-8-2016)";
System.out.println("Default locale: " + Locale.getDefault() + "\t(should be nl_NL)");
System.out.println(usToday);
System.out.println(deToday);
System.out.println(defToday);
na moim komputerze Daje:
domyślne ustawienia regionalne: nl_NL (powinny być nl_NL)
tym tygodniu USA: 35 (powinno być 35 na 24-8-2016)
w tym tygodniu DE: 34 (powinno być 34 w dniu 24-8-2016)
w tym tygodniu domyślnie: 34 (powinno być 34 w dniu 24-8-2016)
Ale dla użytkownika końcowego widzimy złe wyniki:
domyślne ustawienia regionalne: nl_NL (powinny być nl_NL)
tym tygodniu USA: 35 (powinno być 35 na 24-8- 2016)
tym tygodniu DE: 35 (powinno być 34 na 24-8-2016)
tym tygodniu domyślna wartość domyślna: 35 (powinno być 34 na 24-8-2016)
Próbowałem już zmienić ustawienia pierwszego dnia tygodnia i pierwszego tygodnia roku w rejestrze systemu Windows, aby spróbować i odtworzyć problem, bez powodzenia. W MS Outlook otrzymujemy poprawny numer tygodnia na obu komputerach. To prowadzi mnie do przekonania, że problem jest jakoś ograniczony do java.
Czego mi tu brakuje?
Widzę także przypadek 1. Można pozwolić, aby inny użytkownik wykonał operację 'toString' obiektu kalendarza. I zobacz, czy możesz znaleźć w nich różnicę. –
Wyszukujesz te obiekty kalendarza za pomocą 'getMinimalDaysInFirstWeek()' i 'getFirstDayOfWeek()' (spróbuj wymyślić więcej metod pobierania). Nie wiedziałbym, ale oczekiwałbym, że "Kalendarz" wybierze te ustawienia z ustawień systemu operacyjnego, a nie z ustawień narodowych podanych w Javie. –
W zależności od tego, kiedy ten kod był uruchamiany (godzina, data), może być przydatne ustawienie 2 komputerów w tej samej strefie czasowej. Można również zobaczyć, jaki jest pierwszy tydzień roku dla 2 przypadków. –