我JodaTime用来弄清楚当前LocalDate是什么,然后得到下周一的日期.
当我使用以下方法并且当前日期是星期一时,而不是获得下一个星期一,它将获得当天.
private LocalDate getNextMonday() {
LocalDate date = LocalDate.now();
date = date.plusWeeks(1);
return date.withDayOfWeek(DateTimeConstants.MONDAY);
}
Run Code Online (Sandbox Code Playgroud)
为什么我的方法在下周一当前是星期一时没有工作?
Men*_*ild 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);
Run Code Online (Sandbox Code Playgroud)
如果您只对下一个星期一的设置感兴趣,可以将代码简化如下:
LocalDate today = LocalDate.now();
int old = today.getDayOfWeek();
LocalDate next = today.plusDays(8 - old);
Run Code Online (Sandbox Code Playgroud)
关于你的问题 -
为什么我的方法在下周一当前是星期一时没有工作?
答案是该方法withDayofWeek() 将日期设置为CURRENT周的星期一(这取决于星期模型(在Joda-Time中使用的ISO,但是美国星期不同,例如一周开始时 - Joda-Time不支持) .
请注意,使用JSR-310(不适用于Android)或我的库Time4J,有一种更现代的方法 - 请参阅此Time4J -code:
PlainDate nextMonday =
SystemClock.inLocalView().today().with(
PlainDate.DAY_OF_WEEK.setToNext(Weekday.MONDAY)
);
System.out.println("Next monday: " + nextMonday);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3832 次 |
| 最近记录: |