使用java calendar类获取一周的开始和结束日期

使用java calendar类获取一周的开始和结束日期,java,calendar,dayofweek,Java,Calendar,Dayofweek,我想知道给定日期的最后一周和第一周。 e、 g如果日期为2011年10月12日,则我需要日期为2011年10月10日(作为本周的开始日期)和2011年10月16日(作为本周的结束日期) 有人知道如何使用Calendar类(java.util.Calendar)获取这两个日期吗 非常感谢 一些代码如何使用日历对象。我还应该提到,因为它可以帮助您解决许多Date/Calendar问题 代码 如果你想要所有的日期 first.add(Calendar.DAY_OF_WEEK,first.getFirs

我想知道给定日期的最后一周和第一周。 e、 g如果日期为2011年10月12日,则我需要日期为2011年10月10日(作为本周的开始日期)和2011年10月16日(作为本周的结束日期) 有人知道如何使用Calendar类(java.util.Calendar)获取这两个日期吗
非常感谢

一些代码如何使用
日历
对象。我还应该提到,因为它可以帮助您解决许多
Date/Calendar
问题

代码
如果你想要所有的日期

first.add(Calendar.DAY_OF_WEEK,first.getFirstDayOfWeek() - first.get(Calendar.DAY_OF_WEEK)); 

for (int i = 1; i <= 7; i++) {
    System.out.println( i+" Day Of that Week is",""+first.getTime());
    first.add(Calendar.DAY_OF_WEEK,1);
}
first.add(Calendar.DAY\u OF周,first.getFirstDayOfWeek()-first.get(Calendar.DAY\u OF周));

对于(int i=1;i此解决方案适用于任何语言环境(一周的第一天可以是星期天或星期一)

例如,今天是2014年1月29日。对于周日为一周第一天的地区,您将获得:

    start: 2014-01-26
    end: 2014-02-01
对于以星期一为第一天的区域设置,日期为:

    start: 2014-01-27
    end: 2014-02-02

下面是示例代码

public static void main(String[] args) {

    Calendar cal = Calendar.getInstance();
    cal.set(2016, 2, 15);

    {
        Calendar startCal = Calendar.getInstance();
        startCal.setTimeInMillis(cal.getTimeInMillis());

        int dayOfWeek = startCal.get(Calendar.DAY_OF_WEEK);
        startCal.set(Calendar.DAY_OF_MONTH,
                (startCal.get(Calendar.DAY_OF_MONTH) - dayOfWeek) + 1);

        System.out.println("end date : " + startCal.getTime());
    }

    {
        Calendar endCal = Calendar.getInstance();
        endCal.setTimeInMillis(cal.getTimeInMillis());

        int dayOfWeek = endCal.get(Calendar.DAY_OF_WEEK);
        endCal.set(Calendar.DAY_OF_MONTH, endCal.get(Calendar.DAY_OF_MONTH)
                + (7 - dayOfWeek));

        System.out.println("start date : " + endCal.getTime());

    }
}
哪个会打印

start date : Sun Mar 13 20:30:30 IST 2016
end date : Sat Mar 19 20:30:30 IST 2016

我发现接受答案中的公式仅在某些情况下有效。例如,您的一周从周六开始,今天是周日。要到达一周的第一天,我们将返回1天,但公式
cal.get(Calendar.day\u of周)-cal.getFirstDayOfWeek()
将给出-6的答案。解决方案是使用一个模数,可以说,公式是环绕的

int daysToMoveToStartOfWeek =  (
  7 + 
  cal.get(Calendar.DAY_OF_WEEK) - 
  cal.getFirstDayOfWeek()
)%7;

cal.add(Calendar.DAY_OF_WEEK, -1 * daysToMoveToStartOfWeek);

我做了一些类似的事情,这让事情变得简单多了,我想在
last.add(Calendar.DAY\u OF u YEAR,6);
oops,我的错。我想那是一年:)对不起,你的答案是正确的。在某些情况下,当语言环境将一周的开始设置为周日以外的时间时,这会失败。例如,在意大利,一周的开始是星期一,所以当
cal
是星期天时,你有
first.getFirstDayOfWeek()-first.get(Calendar.DAY OfU of U week)
MON-SUN
,这是
2-1
,所以你可以加天数而不是减天数。这会导致您的
第一次
最后一次
日期错误地落在下周。解决方案是确保偏移量始终为零或负,即:
int weekDayOffset=first.getFirstDayOfWeek()-first.get(Calendar.DAY\u OF_WEEK);如果(weekDayOffset>0)weekDayOffset-=7你能在回答中解释代码吗?
start date : Sun Mar 13 20:30:30 IST 2016
end date : Sat Mar 19 20:30:30 IST 2016
int daysToMoveToStartOfWeek =  (
  7 + 
  cal.get(Calendar.DAY_OF_WEEK) - 
  cal.getFirstDayOfWeek()
)%7;

cal.add(Calendar.DAY_OF_WEEK, -1 * daysToMoveToStartOfWeek);