如何在过去一个月的第一个星期一之前选择星期日

Rom*_*Die 1 java date

我想在通过月份的第一天Sunday 之前选择Monday.

Sunday可能是在同一个月或上个月,但我想要的日期Sunday.我尝试了下面的逻辑获取Sunday,它适用于当前月份,但如果我尝试再过一个月,Nov-2017那么我必须MONDAY-2改为MONDAY-3.所以这不是正确的方法.那我该怎么做呢?

Calendar c = Calendar.getInstance();

c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
System.out.println("Date " + c.getTime());
c.set(Calendar.DAY_OF_MONTH, Calendar.MONDAY - 2);
System.out.println("Date " + c.getTime());
Run Code Online (Sandbox Code Playgroud)

我想将日期传递给代码.那我该怎么办呢?就像我将日期保存在变量中然后根据该变量提供的输入,它应该计算逻辑并提供输出

She*_*ong 5

@Test
public void testDate() throws ParseException {

    SimpleDateFormat fmt = new SimpleDateFormat("dd-MMM-yyyy");

    Date d = fmt.parse("01-Nov-2017");
    System.out.println(d);
    Calendar c = Calendar.getInstance();
    c.setTime(d);
    getSundayBefore1thMondayOfMonth(c);
}

public void getSundayBefore1thMondayOfMonth(Calendar c) {
    c.set(Calendar.DAY_OF_MONTH, 1);
    int wd = c.get(Calendar.DAY_OF_WEEK);
    if (wd > Calendar.MONDAY ) {
        c.add(Calendar.DAY_OF_MONTH, 7);
    }
    c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
    System.out.println(c.getTime());
    c.add(Calendar.DAY_OF_MONTH, -1);
    System.out.println(c.getTime());
}



Wed Nov 01 00:00:00 CST 2017
Mon Nov 06 00:00:00 CST 2017
Sun Nov 05 00:00:00 CST 2017
Run Code Online (Sandbox Code Playgroud)