Как получить дату следующего дня в конце дня из данного Момента? (Java) - PullRequest
1 голос
/ 09 марта 2020

У меня есть мгновенная дата, например: 2020-03-09T20:13:57.089Z, и я хочу найти конец следующего дня в мгновенном сообщении, например - 2020-03-10T23:59:59.089Z (это будет конец следующего дня по сравнению с начальной датой)

Как мне сделать это, используя Instant in Java?

Ответы [ 2 ]

3 голосов
/ 09 марта 2020

Один из способов - преобразовать Instant в ZonedDateTime с UTC часовым поясом и изменить дату согласно требованию, а затем преобразовать ее обратно

Полдень:

Instant result = instant.atOffset(ZoneOffset.UTC)
                        .plusDays(1).with(LocalTime.of(11,59,59,instant.getNano()))
                        .toInstant();

Конец дня:

Instant result = instant.atOffset(ZoneOffset.UTC)
                        .plusDays(1).with(LocalTime.of(23,59,59,instant.getNano()))
                        .toInstant();
3 голосов
/ 09 марта 2020

Если вы хотите фактическую полночь (00:00), вы можете использовать:

instant.plus(1, ChronoUnit.DAYS).truncatedTo(ChronoUnit.DAYS);

В противном случае другое решение будет:

LocalDateTime ldt1 = LocalDateTime.ofInstant(instant.plus(1, ChronoUnit.DAYS), ZoneId.systemDefault());

ldt1 = ldt1
        .withHour(23)
        .withMinute(59)
        .withSecond(59);

Instant result = ldt1.atZone(ZoneId.systemDefault()).toInstant();
...