下周一使用JodaTime

时间:2014-08-12 05:30:12

标签: jodatime

我正在使用JodaTime来确定当前LocalDate的内容,然后获取下周一的日期。

当我使用以下方法并且当前日期是星期一时,而不是获得下一个星期一,它将获得当天。

private LocalDate getNextMonday() {
    LocalDate date = LocalDate.now();
    date = date.plusWeeks(1);
    return date.withDayOfWeek(DateTimeConstants.MONDAY);
}

为什么我的方法在下周一当前是星期一时没有工作?

2 个答案:

答案 0 :(得分:10)

Joda-Time不提供内置的优雅解决方案,因此您必须按照以下方式执行自己的解决方法:

LocalDate today = LocalDate.now();
int old = today.getDayOfWeek();
int monday = 1;

if (monday <= old) {
    monday += 7;
}
LocalDate next = today.plusDays(monday - old);
System.out.println("Next monday: " + next);

如果你只想设置到下周一,那么代码可以简化如下:

LocalDate today = LocalDate.now();
int old = today.getDayOfWeek();
LocalDate next = today.plusDays(8 - old);

关于您的问题 -

  

为什么我的方法无法在下周一获得它   目前是星期一?

答案是方法withDayofWeek() 将日期设置为CURRENT周的星期一(这取决于周模型(Joda-Time中使用的ISO,但美国周不同)例如,当一周开始时 - Joda-Time不支持。

请注意,使用JSR-310(不适用于Android)或我的库Time4J,有一种更现代的方法 - 请参阅此Time4J - 代码:

PlainDate nextMonday =
    SystemClock.inLocalView().today().with(
        PlainDate.DAY_OF_WEEK.setToNext(Weekday.MONDAY)
    );
System.out.println("Next monday: " + nextMonday);

答案 1 :(得分:0)

您可以尝试

int targetDay = 1; //or DateTimeConstants.MONDAY
int nowDay = now.getDayOfWeek();

if (nowDay >= targetDay) return now.plusWeeks(1);
else return now.withDayOfWeek(targetDay);

//Or using ternary operator:
return (nowDay >= targetDay ? now.plusWeeks(1) : now).withDayOfWeek(targetDay)