mic*_*ebe 56 java time datetime date jodatime
如何使用Joda-Time API 获取下周五.
在LocalDate今天的是today.在我看来,你必须在本周五之前或之后决定你是谁.看到这个方法:
private LocalDate calcNextFriday(LocalDate d) {
LocalDate friday = d.dayOfWeek().setCopy(5);
if (d.isBefore(friday)) {
return d.dayOfWeek().setCopy(5);
} else {
return d.plusWeeks(1).dayOfWeek().setCopy(5);
}
}
Run Code Online (Sandbox Code Playgroud)
是可以缩短它还是使用oneliner?
PS:请不要建议我使用JDK的日期/时间.Joda-Time是一个更好的API.
Java 8引入了更好的java.time包(Tutorial).
mic*_*ebe 73
使用Java 8及更高版本(教程)中内置的java.time框架,您可以使用它来获取下一个或上一个星期几.TemporalAdjusters
private LocalDate calcNextFriday(LocalDate d) {
return d.with(TemporalAdjusters.next(DayOfWeek.FRIDAY));
}
Run Code Online (Sandbox Code Playgroud)
Esk*_*sko 52
它可以以更容易阅读的方式完成:
if (d.getDayOfWeek() < DateTimeConstants.FRIDAY) {
return d.withDayOfWeek(DateTimeConstants.FRIDAY));
} else if (d.getDayOfWeek() == DateTimeConstants.FRIDAY) {
// almost useless branch, could be merged with the one above
return d;
} else {
return d.plusWeeks(1).withDayOfWeek(DateTimeConstants.FRIDAY));
}
Run Code Online (Sandbox Code Playgroud)
或者以更短的形式
private LocalDate calcNextFriday(LocalDate d) {
if (d.getDayOfWeek() < DateTimeConstants.FRIDAY) {
d = d.withDayOfWeek(DateTimeConstants.FRIDAY));
} else {
d = d.plusWeeks(1).withDayOfWeek(DateTimeConstants.FRIDAY));
}
return d; // note that there's a possibility original object is returned
}
Run Code Online (Sandbox Code Playgroud)
甚至更短
private LocalDate calcNextFriday(LocalDate d) {
if (d.getDayOfWeek() >= DateTimeConstants.FRIDAY) {
d = d.plusWeeks(1);
}
return d.withDayOfWeek(DateTimeConstants.FRIDAY);
}
Run Code Online (Sandbox Code Playgroud)
PS.我没有测试实际代码!:)
你的代码在1行
private LocalDate calcNextFriday3(LocalDate d) {
return d.isBefore(d.dayOfWeek().setCopy(5))?d.dayOfWeek().setCopy(5):d.plusWeeks(1).dayOfWeek().setCopy(5);
}
Run Code Online (Sandbox Code Playgroud)
替代方法
private LocalDate calcNextDay(LocalDate d, int weekday) {
return (d.getDayOfWeek() < weekday)?d.withDayOfWeek(weekday):d.plusWeeks(1).withDayOfWeek(weekday);
}
private LocalDate calcNextFriday2(LocalDate d) {
return calcNextDay(d,DateTimeConstants.FRIDAY);
}
Run Code Online (Sandbox Code Playgroud)
有点测试;-)