Ваши результаты такие, какими они должны быть. Поскольку вы ожидали чего-то другого, ваши ожидания должны были быть неверными.
- В США неделя начинается в воскресенье. Неделя 1 месяца - это неделя, в которой содержится первый день месяца. Таким образом, пятница 1 мая и суббота 2 мая составляют неделю 1. Неделя 2 начинается в воскресенье, 3 мая. Неделя 3 - 10 мая, неделя 4 - 17 мая, неделя 5 - 24 мая и неделя 6 - всего 31 мая.
- Великобритания следует международному стандарту, где неделя начинается в понедельник, а неделя 1 - первая неделя, которая содержит не менее 4 дней месяца. Таким образом, неделя 1 - с понедельника, 4 мая, до воскресенья, 10 мая. Неделя 2 начинается 11 мая, неделя 3 - 18 мая. Неделя 4 - с 25 по 31 мая, и, следовательно, последняя неделя месяца.
В вашем коде вы не запрашивали количество недель в месяце. Вы запросили самое большое число недель в месяце. Это 6 в США и 4 в Великобритании. Хотя месяц имеет одинаковую длину в обоих местах.
java .time
Для демонстрации я использую java .time, современный Java API даты и времени , с рекомендацией, что вы делаете то же самое в вашей работе даты. С современными классами гораздо приятнее работать, чем с устаревшим Calendar
классом, который, честно говоря, всегда плохо спроектирован.
YearMonth mayThisYear = YearMonth.of(2020, Month.MAY);
LocalDate firstOfMonth = mayThisYear.atDay(1);
LocalDate lastOfMonth = mayThisYear.atEndOfMonth();
// US weeks
WeekFields us = WeekFields.of(Locale.US);
int weekOfFirstDay = firstOfMonth.get(us.weekOfMonth());
int weekOfLastDay = lastOfMonth.get(us.weekOfMonth());
System.out.println("US week numbers are " + weekOfFirstDay + " - " + weekOfLastDay);
Вывод:
Номера недели в США равны 1 - 6
Давайте вместо этого попробуем для Соединенного Королевства Великобритании и Северной Ирландии, Великобритании, кратко:
// UK weeks
WeekFields uk = WeekFields.of(Locale.UK);
int weekOfFirstDay = firstOfMonth.get(uk.weekOfMonth());
int weekOfLastDay = lastOfMonth.get(uk.weekOfMonth());
System.out.println("UK week numbers are " + weekOfFirstDay + " - " + weekOfLastDay);
Номера недели в Великобритании - 0 - 4
Мне бы очень хотелось показать вам, как получить желаемый результат, используя java .time, но, хотя я и спросил в комментарии, вы не сказали нам, что считаете правильным числом недель в месяце, поэтому я не могу.