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)
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
- на ThreeTenABP проект приспосабливается ThreeTen-Backport (упомянуто выше) для Android конкретно.
- посмотреть как использовать ThreeTenABP....
в ThreeTen-Extra проект расширяет java.время с дополнительными занятиями. Этот проект является испытательной площадкой для возможных будущих дополнений к java.время. Здесь вы можете найти полезные классы, такие как Interval
, YearWeek
, YearQuarter
и больше.