Java-получить массив имени дня для текущей недели

то, что я ищу, - это создать массив дней недели на java, начиная со вчерашнего дня и до шести дней времени как такового

 String daysWeek[] = { "Yesterday", "Today", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday"};

первые два элемента массива я хочу вернуть вчера и сегодня.

сначала это казалось легкой задачей, используя

currentDay = Calendar.getInstance().get(Calendar.DAY_OF_WEEK);

String daysList[] = {"Sunday", "Monday", "Tuesday", "Wednesday",
            "Thursday", "Friday", "Saturday"};

String daysWeek[] = {"Yesterday", "Today", daysList[currentDay], daysList[currentDay+1], ...};

Примечание выше daysList[currentDay] вернется завтра, так как массив daysList начинается с 0 i.e если currentDay = 3, который говорит, что сегодня вторник, то это будет будь daysList[2].

но моя проблема заключается в том, что если currentDay-7, что подразумевает сегодня суббота, то currentDay+1 который завтра будет восьмым элементом массива, который не существует.

есть ли какие-либо, которые я могу цикл вокруг моих чисел, что если сегодня среда или позже, то один раз currentDay + x > 7, set currentDay вернуться к 1?

все это происходит в одном методе, как называется getDaysList(currentDay) возвращает daysWeek[] массив.

3 ответов


функция пользы к вам здесь дулю (% оператор).

в принципе, то, что делает оператор по модулю, - это взять оставшуюся часть деления, что именно то, что вы хотите. (Помните, в четвертом классе ,когда "9 / 2" было не 4.5, а 4 остатка 1? Это та оставшаяся часть.)

так вместо того, чтобы иметь:

days[currentDay + x]

использование:

days[(currentDay + x) % 7]

быстрый пример значений, возвращаемых по модулю оператор:

 0 % 7 = 0   (0 / 7 = 0 R0)
 1 % 7 = 1   (1 / 7 = 0 R1)
 6 % 7 = 6   (6 / 7 = 0 R6)
 7 % 7 = 0   (7 / 7 = 1 R0)
 8 % 7 = 1   (8 / 7 = 1 R1)
15 % 7 = 1   (15 / 7 = 2 R1)

Вы можете использовать оператор остатка (%):

6 % 7 == 6
7 % 7 == 0
8 % 7 == 1

tl; dr

LocalDate.now( ZoneId.of( "Pacific/Auckland" ) )
         .plusDays( 5 )
         .getDayOfWeek()
         .getDisplayName( TextStyle.FULL , Locale.US )

подробности

отвлекитесь от идеи индекса массива, относящегося к дню недели.

кроме того, обычно лучше использовать современный объект Collection собрать ваши объекты, а не просто массив.

кроме того, избегайте хлопот Calendar класса. Теперь вытеснен java.время классы.

сначала получить текущую дату. The LocalDate класс представляет значение только даты без времени суток и без часового пояса.

часовой пояс имеет решающее значение для определения даты. Для любого данного момента дата варьируется по всему миру по зонам. Например, через несколько минут после полуночи в Париж, Франция новый день пока еще "вчера" в Квебека Монреале.

указать правильное название часового пояса в формате continent/region, например America/Montreal, Africa/Casablanca или Pacific/Auckland. Никогда не используйте аббревиатуру из 3-4 букв, такую как EST или IST как они не истинные часовые пояса, не стандартизированные и даже не уникальные(!).

ZoneId z = ZoneId.of( "America/Montreal" );
LocalDate today = LocalDate.now( z );

мы знаем, что результат за вчерашний день yesterday поэтому нет необходимости вычислять эту дату. Если вам нужна дата, позвоните LocalDate::minusDays.

мы можем спросить каждого LocalDate для имени своего дня, извлекая DayOfWeek объект перечисление. Это DayOfWeek знаю свое собственное имя на любом человеческом языке что вы можете указать через Locale, теперь режим обслуживания, советует миграцию в java.время классы.

чтобы узнать больше, см. В Oracle Учебник. И search Stack Overflow для многих примеров и объяснений. Спецификация JSR 310.

где получить java.время занятий?

  • Java SE 8, Java SE 9, и позже
    • встроенный.
    • часть стандартного API Java со встроенной реализацией.
    • Java 9 добавляет некоторые незначительные функции и исправления.
  • Java SE 6 и Java SE 7
    • большая часть java.функциональность времени обратно портирована на Java 6 & 7 в ThreeTen-Backport.
  • Android

в ThreeTen-Extra проект расширяет java.время с дополнительными занятиями. Этот проект является испытательной площадкой для возможных будущих дополнений к java.время. Здесь вы можете найти полезные классы, такие как Interval, YearWeek, YearQuarter и больше.