2015-03-05 2 views
2

мне нужно, чтобы получить даты последних двух пятниц с использованием современных date.This это код, который я сейчас использую общественного класс GetDate {Как получить дату последних двух пятниц с сегодняшнего дня?

public static void main(String[] args) { 
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 
    Date dt = new Date(); 
    Calendar c = Calendar.getInstance(); 
    c.setTime(dt); 
    System.out.println("today : " + sdf.format(dt)); 
    while (c.get(Calendar.DAY_OF_WEEK) != 6) { 
     c.add(Calendar.DATE, -1); 
    } 
    Date lastFri=c.getTime(); 
    System.out.println("last fri : "+sdf.format(lastFri)); 
    c.add(Calendar.DATE, -7); 
    Date prevFri = c.getTime(); 
    System.out.println("previous friday : "+sdf.format(prevFri)); 

    } 


} 

Есть ли способ, чтобы оптимизировать этот код ??

+1

Это выглядит хорошо, почему вы хотите изменить его? – libik

+1

Используйте API-интерфейс JodaTime или Java 8s – MadProgrammer

ответ

2

Вы могли бы получить последнюю пятницу таким образом:

Calendar cal = Calendar.getInstance(); 
cal.add(Calendar.WEEK_OF_YEAR, -1); 
cal.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY); 

Это происходит в последнюю пятницу, вычитая неделю и устанавливая день недели в пятницу.

3

С Java 8, и если вы не имеют использовать API Календаря, вы можете использовать TemporalAdjuster:

LocalDate today = LocalDate.now(); 
LocalDate prevFriday = today.with(previous(FRIDAY)); 
LocalDate prevPrevFriday = prevFriday.with(previous(FRIDAY)); 

примечание: требуется следующий статический импорт
import static java.time.temporal.TemporalAdjusters.previous;
import static java.time.DayOfWeek.FRIDAY;

+1

Гораздо более читабельны, чем со старыми API 'Date' и' Calendar'. – Jesper

1

Попробуйте что-то вроде:

cal.add(Calendar.WEEK_OF_YEAR, -1); 
cal.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY); 
Date lastFriday = cal.getTime(); 
cal.add(Calendar.WEEK_OF_YEAR, -1); 
cal.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY); 
Date lastToLastFriday = cal.getTime(); 
0

Эта линия должна помочь:

calendar.add(Calendar.DATE, Calendar.FRIDAY - 7 - c.get(Calendar.DAY_OF_WEEK)); 

Так что этот код решает проблему:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 
Calendar c = GregorianCalendar.getInstance(); 
c.add(Calendar.DATE, Calendar.FRIDAY - 7 - c.get(Calendar.DAY_OF_WEEK)); 
System.out.println(sdf.formate(c.getTime())); 
c.add(Calendar.DATE, Calendar.FRIDAY - 14 - c.get(Calendar.DAY_OF_WEEK)); 
System.out.println(sdf.formate(c.getTime())); 
Смежные вопросы