2016-08-24 10 views
8

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?

+2

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ę. –

+1

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. –

+1

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. –

Odpowiedz

1

Właśnie sprawdziłem mój program testów czasu Jody na komputerze mojego kolegi, który działa tak, jak powinien. Wygląda na to, że będziemy pracować nad zmianą głównego programu do korzystania z tej biblioteki (i ewentualnie przełączyć się na Czas, gdy dojdziemy do Javy 8).

Sugeruję, aby nie poświęcać zbyt dużo czasu na zachęcanie klasy kalendarza do współpracy przy kontaktach z biblioteką. numery tygodni w Javie.

Powiązane problemy