jodatime - 使用 JodaTime 获取下周一

标签 jodatime

我正在使用 JodaTime弄清楚当前是什么LocalDate是然后获得下一个星期一的日期。

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

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

为什么我的方法无法在当前是星期一的情况下获得下一个星期一?

最佳答案

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

关于你的问题——

Why is my method not working in getting the following Monday when it is currently a Monday?



答案是方法withDayofWeek() 将日期设置为当前周的星期一 (这取决于周模型(在 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);

关于jodatime - 使用 JodaTime 获取下周一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25256781/

相关文章:

scala - 异常 joda-time - localdatetime 支持

scala - 如何使用joda时间在scala中将dd/mm/yyyy转换为yyyymmdd

java - 如何使用 Joda-Time 表达部分间隔?

java - Joda DateTime toDate 返回的结果与 Created DateTime 不同

java - 为什么要获得具有相同时区的不同 localDate

java - Joda 时区与 JDK 的时区不同

android - 如何使用 Joda DateTime 显示荷兰月份

java - JodaTime 比较两个不同时区的日期

java - 日期时间转换为日期时显示不同的日期

java - 在 Hibernate 中保留 Joda DateTime 而不是 Java Date