时间:如何获得下周五?

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.time

使用Java 8及更高版本(教程)中内置的java.time框架,您可以使用它来获取下一个上一个星期几.TemporalAdjusters

private LocalDate calcNextFriday(LocalDate d) {
  return d.with(TemporalAdjusters.next(DayOfWeek.FRIDAY));
}
Run Code Online (Sandbox Code Playgroud)

  • 不,但它是从它发展而来的.这里引用了joda time主页:_Joda-Time是Java SE 8之前Java的事实标准日期和时间库.现在要求用户迁移到java.time(JSR-310)._ (2认同)
  • 仅供参考,[java.time](http://docs.oracle.com/javase/8/docs/api/java/time/package-summary.html)类内置于Java 8及更高版本中.许多java.time功能已在[ThreeTen-Backport](http://www.threeten.org/threetenbp/)中反向移植到Java 6和7,并在[ThreeTenABP]中进一步适应Android(https:/ /github.com/JakeWharton/ThreeTenABP).另外,请参阅[Oracle教程](http://docs.oracle.com/javase/tutorial/datetime/TOC.html)以了解更多信息. (2认同)

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.我没有测试实际代码!:)

  • @David你什么也没看见;) (8认同)
  • 或者编译它......"DateTimeConstans" (2认同)

fvu*_*fvu 5

你的代码在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)

有点测试;-)

  • @michaelkebe你问了一个oneliner,我只提供了一个...... ;-) (5认同)