String specificDate=2013+"-"+06+"-"+20;
String day="Monday";
如何找到在那之后的下一个星期一到来的日期specificDate
?
String specificDate=2013+"-"+06+"-"+20;
String day="Monday";
如何找到在那之后的下一个星期一到来的日期specificDate
?
鉴于您正在查看日期规则,您要么想查看Java 的 Calendar或JodaTime,我建议您使用 Joda。
使用标准 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
方法会将日期移动到下一个星期一而不是前一个星期一,并且您最终会计算给定日期之后的第二个星期一. 如果一周的第一天是星期一,那么一切都会按预期进行。
对于 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);
这是基于这个答案
尝试这个
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();
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();
你真的应该使用更高级别的日期库来为你做这件事。不幸的是,java 内置的 Date 和 Calendar 类远不理想。您可以看看这个库,它已经成为 Java 开发人员中日期操作的事实上的标准,直到新的 JDK 设计最终确定。
您应该为此使用 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);
}