1
String specificDate=2013+"-"+06+"-"+20;
String day="Monday";

如何找到在那之后的下一个星期一到来的日期specificDate

4

7 回答 7

3

鉴于您正在查看日期规则,您要么想查看Java 的 CalendarJodaTime,我建议您使用 Joda。

于 2013-06-20T11:12:49.877 回答
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方法会将日期移动到下一个星期一而不是前一个星期一,并且您最终会计算给定日期之后的第二个星期一. 如果一周的第一天是星期一,那么一切都会按预期进行。

于 2013-06-20T11:39:27.527 回答
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

正如这里更详细地展示的那样

或者,如果您更喜欢使用 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);

这是基于这个答案

于 2014-12-10T03:57:46.140 回答
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();
于 2013-06-20T11:17:00.817 回答
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();  
于 2013-06-20T11:12:45.027 回答
1

你真的应该使用更高级别的日期库来为你做这件事。不幸的是,java 内置的 Date 和 Calendar 类远不理想。您可以看看这个库,它已经成为 Java 开发人员中日期操作的事实上的标准,直到新的 JDK 设计最终确定。

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

于 2013-06-20T11:12:53.043 回答
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);
}
于 2013-06-20T11:15:28.027 回答