如何在Java中查找前2个星期一的日期?

时间:2011-10-31 17:38:11

标签: java date time

可能是这样的:

for(int i=0;i<15;i++){
Calendar cal = new GregorianCalendar();
cal.add(Calendar.DAY_OF_MONTH, -1);

if (cal.Calendar.DAY_OF_WEEK==1){
System.out.println(cal.cal.getTime())

但可能存在更简单的方式? 感谢。

3 个答案:

答案 0 :(得分:3)

你走在正确的轨道上。

Calendar cal = Calendar.getInstance();
cal.add(Calendar.DAY_OF_YEAR, -7); // First week before
cal.add(Calendar.DAY_OF_YEAR, -7); // Second week before

让我在星期一做这项工作。

Calendar cal = Calendar.getInstance();

int weekday = cal.get(Calendar.DAY_OF_WEEK);
int days = (Calendar.SATURDAY - weekday + 2) % 7;

cal.add(Calendar.DAY_OF_YEAR, days);

cal.add(Calendar.DAY_OF_MONTH, -7);
cal.add(Calendar.DAY_OF_MONTH, -7);

答案 1 :(得分:1)

更简单的是直接设置工作日:

Calendar cal = Calendar.getInstance();
cal.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
cal.add(Calendar.DATE, -7);
System.out.println(cal.getTime());

请记住,这不会影响时间。如果您想要00:00,则需要设置适当的值:

cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);

答案 2 :(得分:1)

java.time

使用TemporalAdjuster。

LocalDate today = LocalDate.now();

LocalDate previousOrSameMonday = today.with( TemporalAdjusters.previousOrSame( DayOfWeek.MONDAY ) );

并减去一周以获得第二个。

LocalDate secondMondayBefore = previousOrSameMonday.minusWeeks( 1 );
相关问题