Есть график на две недели , то есть с 1 сентября у нас начинается первая неделя , потом следующая вторая, а потом следующая опять первая. Подскажите как средствами java реализовать алгоритм который будет определять какая сейчас неделя по графику получая на вход текущую дату. Заранее благодарен.
Например, так:
Date start = null;
try {
start = new SimpleDateFormat("dd/MM/yyyy").parse("01/09/2019"); //получим дату 1-го сентября 2019
} catch (ParseException exc) {
exc.printStackTrace();
}
long delay = System.currentTimeMillis() - start.getTime(); //получим разницу (в мс) между сегодня и 1-ым сентября
long week = 1000 * 60 * 60 * 24 * 7; //кол-во миллисекунд в одной неделе
delay %= week * 2; //найдем остаток от деления разницы на две недели
if (delay <= week) System.out.println("First week"); //если разница меньше либо равна одной неделе, то это первая неделя
else System.out.println("Second week"); //иначе вторая
Воспользоваться классом Calendar, получить номер недели и посмотреть, является ли он четным или нечетным.
public Boolean IsOdd(Date date){
Calendar calendar = new GregorianCalendar();
calendar.setTime(new Date());
return calendar.get(Calendar.WEEK_OF_MONTH) % 2 != 0;
}
import java.time.LocalDate;
import static java.time.temporal.ChronoUnit.WEEKS;
public class Main {
public static void main(String[] args) {
System.out.println(isFirstWeek(LocalDate.of(2019, 9, 10)));
}
public static boolean isFirstWeek (LocalDate date) {
return date.getMonthValue()>=9 ?
WEEKS.between(date.withMonth(9).withDayOfMonth(1), date)%2==0 :
WEEKS.between(date.withMonth(9).withDayOfMonth(1).minusYears(1), date)%2==0;
}
}
Я так понимаю, что речь идет об расписании на учебный год. Это вариант всегда считает недели как 1 сентября + 7 дней, учитывая, что учебный год не равен календарному, т.е., к примеру, 5 сентября 2019 и 5 марта 2020 - это разные календарные годы, но один учебный. Все это корректно с точки зрения временного промежутка. Вместе с тем, если Вам нужно учитывать дни недели, то это неверное решение. Например, 1 сентября 2019 года это воскресенье. Следовательно, 1 неделю следует отсчитывать с понедельника 2 сентября. Однако, если бы 1 сентября пришлось, например, на четверг, то первая неделя состояла бы только из 4 дней с четверга по воскресенье включительно. Если Вам нужно именно это , то метод следует несколько изменить:
public static boolean isFirstWeek (LocalDate date) {
final LocalDate firstMonday = date.getMonthValue()>=9 ?
date.withMonth(9).withDayOfMonth(1).minusDays(date.getDayOfWeek().getValue()-1) :
date.withMonth(9).withDayOfMonth(1).minusDays(date.getDayOfWeek().getValue()-1).minusYears(1);
return firstMonday.minusDays(firstMonday.getDayOfWeek().getValue()-1).isBefore(firstMonday) ?
WEEKS.between(firstMonday, date)%2==0 : WEEKS.between(firstMonday, date)%2!=0;
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Всем привет, такой вопросЕсть список который может содержать более 1000 элементов, по которому надо сделать сравнение
В таблице Location содержится информация которая должна выбираться согласно связи charactersorigin_id reference to location
При первом запуске Android Studio возникает окно, с помощью которого можно установить все необходимые расширения, но после создания первого проекта,...