在java中获取下周和前一周的开始和结束日期

时间:2012-05-05 19:59:50

标签: java date calendar dayofweek

我想知道一周的开始和结束日期 例如

2012-05-06至2012-05-12
2012-05-13至2012-05-19

我写的代码是

currWeekCalender.add(Calendar.WEEK_OF_YEAR, 1);

    String dateStart =  currWeekCalender.get(Calendar.YEAR) + "-" + addZero((currWeekCalender.get(Calendar.MONTH) + 1)) + "-" + addZero(currWeekCalender.getFirstDayOfWeek());
    currWeekCalender.add(Calendar.DAY_OF_MONTH,7);
    String dateEnd =  currWeekCalender.get(Calendar.YEAR) + "-" + addZero((currWeekCalender.get(Calendar.MONTH) + 1)) + "-" + addZero(currWeekCalender.get(Calendar.DAY_OF_MONTH));

但结果不正确,我也想要上周的约会。

由于

3 个答案:

答案 0 :(得分:2)

你的问题是getFirstDayOfWeek()返回一周的第一天;例如,周日在美国,周一在法国。它不会返回一个月中的某一天。请参阅javadoc

本周开始的一个月的第一天是(伪代码)

((7 + (firstDayOfWeek - dayOfWeek(firstOfMonth))) % 7) + 1

如果您愿意,可以将其翻译成java.util.Calendar代码,但我建议您改用Joda时间。


  

我也想要上周的约会。

可以使用add

减去七天
currCalendar.add(Calendar.DAY_OF_MONTH, -7)

这可能涉及下溢,但add处理此问题。

  

add(f, delta)

     

将delta添加到字段f。这相当于通过两次调整来调用set(f, get(f) + delta)

     

添加规则1。调用后字段f的值减去调用前的字段f的值为delta,以模拟字段f中发生的任何溢出为模。当字段值超出其范围时发生溢出,结果,下一个更大的字段递增或递减,字段值被调整回其范围。

答案 1 :(得分:2)

所有编码员都好:)

我正在使用小应用程序从数据库中下载一些数据。要计算前几周的开始日期和结束日期,请使用以下代码:

// Calendar object
Calendar cal = Calendar.getInstance();

// "move" cal to monday this week (i understand it this way)
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);

// calculate monday week ago (moves cal 7 days back)
cal.add(Calendar.DATE, -7);
Date firstDateOfPreviousWeek = cal.getTime();

// calculate sunday last week (moves cal 6 days fwd)
cal.add(Calendar.DATE, 6);
Date lastDateOfPreviousWeek = cal.getTime();

希望,这有帮助。

答案 2 :(得分:1)

Java 8版本

打印前10周

{{1}}