Java正在获取前一周的日期列表

Java正在获取前一周的日期列表,java,android,date,Java,Android,Date,在根据指定日期获取前一周的日期列表时,我遇到了一些问题。这是我的密码: SimpleDateFormat formatter = new SimpleDateFormat("EEE MMM dd"); Date refDate = null; try { refDate = formatter.parse("Sun Aug 05"); } catch (ParseException e) {

在根据指定日期获取前一周的日期列表时,我遇到了一些问题。这是我的密码:

        SimpleDateFormat formatter = new SimpleDateFormat("EEE MMM dd");
        Date refDate = null;
        try {
            refDate = formatter.parse("Sun Aug 05");
        } catch (ParseException e) {
            e.printStackTrace();
        }
        Date[] days = reservationViewModel.getDaysOfWeek(refDate, Calendar.getInstance().getFirstDayOfWeek());
        for (Date day : days) {
            // display            
        }
以及获取日期列表的代码:

public static Date[] getDaysOfWeek(Date refDate, int firstDayOfWeek) {
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(refDate);
    calendar.set(Calendar.DAY_OF_WEEK, firstDayOfWeek);
    Date[] daysOfWeek = new Date[7];
    for (int i = 0; i < 7; i++) {
        daysOfWeek[i] = calendar.getTime();
        calendar.add(Calendar.DAY_OF_MONTH, 1);
    }
    return daysOfWeek;
}

日期都错了。应该从7月29日到8月4日。有什么想法吗?谢谢

使用Calendar.week\u OF\u YEAR将时间从给定日期移到前一周。代码类似于calendar.setCalendar.WEEK\u OF_YEAR,calendar.getCalendar.WEEK\u OF_YEAR-1

所以在你的情况下是这样的

public static Date[] getDaysOfWeek(Date refDate, int firstDayOfWeek) {
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(refDate);
    calendar.set(Calendar.DAY_OF_WEEK, firstDayOfWeek);
    calendar.set(Calendar.WEEK_OF_YEAR, calendar.get(Calendar.WEEK_OF_YEAR) - 1);
    Date[] daysOfWeek = new Date[7];
    for (int i = 0; i < 7; i++) {
        daysOfWeek[i] = calendar.getTime();
        calendar.add(Calendar.DAY_OF_MONTH, 1);
    }
    return daysOfWeek;
}

不,不,我想做的是根据指定的日期获取前一周的日期。例如,我得到一个上周的日期,然后我想得到当前日期前两周的日期,而不是根据当前日期继续得到过去一周的日期date@guest176969这就是我想说的。只需使用此方法。@guest176969此处1周前并不意味着您要将其从当前日期移到1周前。它将在给定日期前一周移动。但当我在8月5日的太阳中通过时,我得到了7月26日的太阳,一直到8月1日的星期六,这是错误的。你知道为什么会这样吗?应该是7月29日到8月04@guest176969API做得很正确,但您使用的方式不正确。你的期望是什么?你是想在给定日期之前获得7天的时间吗?或者你是想在约会前一周得到时间?两者完全不同。发布前搜索堆栈溢出。这已经在很多方面讨论过很多次了,您使用的是多年前被java.time类取代的糟糕的旧类。这已经在堆栈溢出上解释过很多次了。哥们,8月5日,星期日。它没有提到哪一年。你为什么认为计算机会猜呢?将年份添加到字符串和格式中。记住根据答案减去一周。问题解决了。
public static Date[] getDaysOfWeek(Date refDate, int firstDayOfWeek) {
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(refDate);
    calendar.set(Calendar.DAY_OF_WEEK, firstDayOfWeek);
    calendar.set(Calendar.WEEK_OF_YEAR, calendar.get(Calendar.WEEK_OF_YEAR) - 1);
    Date[] daysOfWeek = new Date[7];
    for (int i = 0; i < 7; i++) {
        daysOfWeek[i] = calendar.getTime();
        calendar.add(Calendar.DAY_OF_MONTH, 1);
    }
    return daysOfWeek;
}
public static Date[] getPrevious7Days(Date refDate) {
    Calendar calendar = Calendar.getInstance();
    int currentYear = calendar.get(Calendar.YEAR);
    calendar.setTime(refDate);
    calendar.set(Calendar.YEAR, currentYear);
    calendar.add(Calendar.DAY_OF_MONTH, -7);

    Date[] daysOfWeek = new Date[7];
    for (int i = 0; i < 7; i++) {
        daysOfWeek[i] = calendar.getTime();
        calendar.add(Calendar.DAY_OF_MONTH, 1);
    }
    return daysOfWeek;
}
Sun Jul 29 00:00:00 IST 2018
Mon Jul 30 00:00:00 IST 2018
Tue Jul 31 00:00:00 IST 2018
Wed Aug 01 00:00:00 IST 2018
Thu Aug 02 00:00:00 IST 2018
Fri Aug 03 00:00:00 IST 2018
Sat Aug 04 00:00:00 IST 2018