Как получить конец дня, когда задан LocalDate?

Как получить конец дня при задании LocalDate?

Я мог бы получить его, выполнив

LocalDateTime.of(LocalDate.now(), LocalTime.of(23, 59, 59));

Но есть ли эквивалентный метод atStartOfDay в конце дня?

LocalDate.now().atStartOfDay();
LocalDate.now().atEndOfDay(); //doesn't work

Ответ 1

Вот несколько альтернатив, в зависимости от того, что вам нужно:

LocalDate.now().atTime(23, 59, 59);     //23:59:59
LocalDate.now().atTime(LocalTime.MAX);  //23:59:59.999999999

Но нет встроенного метода.

Как прокомментировал @JBNizet, если вы хотите создать интервал, вы также можете использовать интервал до полуночи, исключительный.

Ответ 2

Получить начало следующего дня и вычесть из него 1 секунду. Это должно сработать для вас.

public static void main(String[] args) {

    LocalDate date = LocalDate.now();
    LocalDateTime dt = date.atStartOfDay().plusDays(1).minusSeconds(1);
    System.out.println(dt);
}

O/P:

2016-04-04T23:59:59

Ответ 3

Это варианты, доступные в LocalTime, уведомления MIDNIGHT и MIN равны.

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

Для справки, это реализация в 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);
}