У меня есть дата, которая является датой недели (с понедельника по пятницу). Например дата, которая у меня есть 06-07-2016 (среда). Это может быть любой день с понедельника по пятницу. И я хочу получить в предыдущую субботу (02-07-2016) дату этой даты. Как я могу это достичь?Как получить субботу из Календарь в java за определенную неделю?
ответ
с использованием Java 8 беглые классы Date/Time:
LocalDate inputDate = ...
LocalDate prevSat = inputDate.with(TemporalAdjusters.previous(DayOfWeek.SATURDAY));
дата, которую я устанавливаю, может быть прошлой датой, а не текущей датой –
здесь вы идете .... было ли это так сложно? –
@seethalakshmi, проверьте документацию для LocalDate, чтобы манипулировать датой в прошлом, настоящем или будущем. https://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html – Tom
Попробуйте это:
Calendar cal=Calendar.getInstance();
cal.add(Calendar.DAY_OF_WEEK, - cal.get(Calendar.DAY_OF_WEEK));
System.out.println(cal.get(Calendar.DATE));
Здесь. 2 рабочих решения. Сначала я рассчитываю, сколько дней прошло до прошлой субботы, а затем я делаю новую дату, в которой я вычитаю номер, который я получаю от метода. Это дает нам точную дату последней субботы. Второе решение проще, с использованием возможностей Java 8.
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.temporal.TemporalAdjuster;
import java.time.temporal.TemporalAdjusters;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
public class CalendarSat {
public static void main(String[] args) {
Date date = new Date();
date.setDate(date.getDate()-lastSut(date.getDay()));
System.out.println("Custom solution with method: " + date);
LocalDate inputDate = LocalDate.now();
LocalDate prevSat = inputDate.with(TemporalAdjusters.previous(DayOfWeek.SATURDAY));
System.out.println("Java 8 solution: " + prevSat);
}
public static int lastSut(int currentDay) {
int toRet = 0;
int num = 6;
for(int i = 0; i<7;i++) {
if(num==currentDay) {
toRet=i;
}
if(currentDay==0)
currentDay=7;
currentDay--;
}
return toRet;
}
}
У меня действительно нет идеи, как получить это –
Пожалуйста, прочитайте [ask]. – Idos
Серьезно, человек с репутацией 2K; и вы ожидаете, что такой вопрос будет летать? – GhostCat