2016-07-25 2 views
-11

У меня есть дата, которая является датой недели (с понедельника по пятницу). Например дата, которая у меня есть 06-07-2016 (среда). Это может быть любой день с понедельника по пятницу. И я хочу получить в предыдущую субботу (02-07-2016) дату этой даты. Как я могу это достичь?Как получить субботу из Календарь в java за определенную неделю?

+1

У меня действительно нет идеи, как получить это –

+3

Пожалуйста, прочитайте [ask]. – Idos

+4

Серьезно, человек с репутацией 2K; и вы ожидаете, что такой вопрос будет летать? – GhostCat

ответ

2

с использованием Java 8 беглые классы Date/Time:

LocalDate inputDate = ... 
LocalDate prevSat = inputDate.with(TemporalAdjusters.previous(DayOfWeek.SATURDAY)); 
+0

дата, которую я устанавливаю, может быть прошлой датой, а не текущей датой –

+0

здесь вы идете .... было ли это так сложно? –

+0

@seethalakshmi, проверьте документацию для LocalDate, чтобы манипулировать датой в прошлом, настоящем или будущем. https://docs.oracle.com/javase/8/docs/api/java/time/LocalDate.html – Tom

0

Попробуйте это:

Calendar cal=Calendar.getInstance(); 
cal.add(Calendar.DAY_OF_WEEK, - cal.get(Calendar.DAY_OF_WEEK)); 
System.out.println(cal.get(Calendar.DATE)); 
0

Здесь. 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; 
    } 
}