给定LocalDate时如何获得当天的结束?

coo*_*xie 45 java java-time

给定LocalDate时如何获得当天的结束?

我可以做到这一点

LocalDateTime.of(LocalDate.now(), LocalTime.of(23, 59, 59));
Run Code Online (Sandbox Code Playgroud)

但是在一天结束时是否有相同的'atStartOfDay'方法?

LocalDate.now().atStartOfDay();
LocalDate.now().atEndOfDay(); //doesn't work
Run Code Online (Sandbox Code Playgroud)

ass*_*ias 78

以下是一些替代方案,具体取决于您的需求:

LocalDate.now().atTime(23, 59, 59);     //23:59:59
LocalDate.now().atTime(LocalTime.MAX);  //23:59:59.999999999
Run Code Online (Sandbox Code Playgroud)

但是没有内置方法.

正如@JBNizet评论的那样,如果你想创建一个间隔,你也可以使用一个间隔到午夜,独家.

  • @MateusViccari LocalDate / LocalDateTime 没有时区,因此没有 DST 规则。不确定你在问什么。 (2认同)

Rob*_*unt 21

这些是变体LocalTime,通知MIDNIGHTMIN相同的变体.

LocalDate.now().atTime(LocalTime.MIDNIGHT); //00:00:00.000000000
LocalDate.now().atTime(LocalTime.MIN);      //00:00:00.000000000
LocalDate.now().atTime(LocalTime.NOON);     //12:00:00.000000000
LocalDate.now().atTime(LocalTime.MAX);      //23:59:59.999999999
Run Code Online (Sandbox Code Playgroud)

作为参考,这是实现中的 java.time.LocalTime

/**
 * Constants for the local time of each hour.
 */
private static final LocalTime[] HOURS = new LocalTime[24];
static {
    for (int i = 0; i < HOURS.length; i++) {
        HOURS[i] = new LocalTime(i, 0, 0, 0);
    }
    MIDNIGHT = HOURS[0];
    NOON = HOURS[12];
    MIN = HOURS[0];
    MAX = new LocalTime(23, 59, 59, 999_999_999);
}
Run Code Online (Sandbox Code Playgroud)


The*_*ind 7

从第二天开始,减去1秒钟.这应该适合你.:

public static void main(String[] args) {

    LocalDate date = LocalDate.now();
    LocalDateTime dt = date.atStartOfDay().plusDays(1).minusSeconds(1);
    System.out.println(dt);
}
Run Code Online (Sandbox Code Playgroud)

O/P:

2016-04-04T23:59:59
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这是 1 秒,而不是 1 毫秒,我建议不要使用此 hack (6认同)
  • 这只会为您提供 23:59:59.000000000 的时间。因此,如果您使用此解决方案,您应该意识到这一点。使用已接受的答案更安全:/sf/answers/2548610851/ (2认同)