2013-06-20 63 views

回答

1
Calendar now = Calendar.getInstance(); 
SimpleDateFormat sdf = new SimpleDateFormat(formatString); 
now.setTime(sdf.parse(dateString)); 
int weekday = now.get(Calendar.DAY_OF_WEEK); 
if (weekday != Calendar.MONDAY) 
{ 

    int days = (Calendar.SATURDAY - weekday + 2) % 7; 
    now.add(Calendar.DAY_OF_YEAR, days); 
} 
Date monday = now.getTime(); 
1

你应该真的使用更高级的Date库来为你做。不幸的是,构建在Date和Calendar类中的java远远不够理想。您可以看看这个库,它已经成为Java开发人员日期处理的事实标准,直到新的JDK设计完成。

http://joda-time.sourceforge.net/

1

您应该使用Calendar类为。

Calendar c1 = Calendar.getInstance(); 
c1.set(2013, Calendar.JUNE, 20); 

int weekday = now.get(Calendar.DAY_OF_WEEK); 
if (weekday != Calendar.MONDAY) { 
    // calculate how much to add 
    // the 2 is the difference between Saturday and Monday 
    int days = (Calendar.SATURDAY - weekday + 2) % 7; 
    now.add(Calendar.DAY_OF_YEAR, days); 
} 
1

试试这个

Calendar c = new GregorianCalendar(2013, 5, 20); 
    int diff = Calendar.MONDAY - c.get(Calendar.DAY_OF_WEEK); 
    if (diff < 0) { 
     diff = 7 + diff; 
    } 
    c.add(Calendar.DATE, diff); 
    Date monday = c.getTime(); 
1

最简单的方法与标准API做这个星期被设置为周一再前进一七

Calendar c = Calendar.getInstance(); 
c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); // Sets c to this week's Monday 
c.add(Calendar.DATE, 7);      // Advances c to next week's Monday 

注意,如果在您的文化中,每周的第一天是星期日,开始的日期是星期日,set方法会将日期移至下一个星期一 - 而不是前一天 - 最终计算秒数在给定日期之后的星期一。如果星期一的第一天是星期一,一切都按预期工作。

1

对于Java 8中,您可以使用类似...

LocalDate date = LocalDate.of(2013, Month.JUNE, 20); 
LocalDate nextWed2 = date.with(TemporalAdjusters.nextOrSame(DayOfWeek.MONDAY)); 

或...

LocalDate date = LocalDate.of(2013, Month.JUNE, 20); 
LocalDate nextWed2 = date.with(TemporalAdjusters.next(DayOfWeek.MONDAY)); 

如果选择日期为MONDAY,但是你想在未来MONDAY

如演示here更详细

或者,如果你喜欢使用JodaTime ...

LocalDate date = new LocalDate(2013, DateTimeConstants.JUNE, 20); 
    LocalDate nextMonday = new LocalDate(date); 
    if (date.getDayOfWeek() >= DateTimeConstants.FRIDAY) { 
     nextMonday = date.plusWeeks(1); 
    } 
    nextMonday = nextMonday.withDayOfWeek(DateTimeConstants.FRIDAY); 

这是基于this answer