如何在Java中找到前两个星期一的日期?

问题描述:

可能是这样的:如何在Java中找到前两个星期一的日期?

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()) 

但是可能存在更简单的方法? 谢谢。

您正处在正确的轨道上。

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); 
+0

这不需要给星期一作为结果吗? –

+0

正确。错过了。固定。 – CamelSlack

即使简单的是直接设置平日:

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); 

java.time

使用TemporalAdjuster。

LocalDate today = LocalDate.now(); 

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

并减去一周得到第二个。

LocalDate secondMondayBefore = previousOrSameMonday.minusWeeks(1);