Java Date устанавливает минуты и секунды на 0 - PullRequest
0 голосов
/ 19 марта 2019

Я хочу установить минуты и секунды даты на 0, но я вижу, что эти методы устарели

Date yesterday = Date.from(Instant.now().minus(24, ChronoUnit.HOURS));

    yesterday.setMinutes(0);
                yesterday.setSeconds(0);

1 Ответ

1 голос
/ 19 марта 2019

TL; DR

    ZonedDateTime yesterday = ZonedDateTime.now(ZoneId.of("Europe/Madrid"))
            .minusDays(1)
            .truncatedTo(ChronoUnit.HOURS);
    System.out.println("Yesterday with minutes and seconds set to 0: " + yesterday);

Бег только что дал

Вчера с минутами и секундами, установленными в 0: 2019-03-17T23: 00 + 01: 00 [Европа / Мадрид]

Определить вчера

Если вы намеревались «вчера в одно и то же время», это не всегда 24 часа назад. Из-за летнего времени (DST) и других аномалий день может составлять, например, 23, 23,5 или 25 часов.

java.time

Класс ZonedDateTime java.time, современного Java-API даты и времени, учитывает аномалии времени в вашем часовом поясе. Поэтому, когда вы вычитаете день, вы получаете то же самое время вчера, если это время вообще существует.

.truncatedTo(ChronoUnit.HOURS) устанавливает минуты, секунды и доли секунды в 0 часовом поясе.

Вы пытались использовать класс Date, но в Java 8 вы не должны этого делать. Он плохо спроектирован и давно устарел. Я считаю, что с java.time гораздо приятнее работать.

Если вам обязательно нужна старомодная дата

Вам может понадобиться Date для устаревшего API, который вы не можете изменить или не можете позволить себе изменить прямо сейчас. В этом случае конвертируйте только в последний момент:

    Instant yesterdayInstant = yesterday.toInstant();
    Date yesterdayDate = Date.from(yesterdayInstant);
    System.out.println("As old-fashoined Date: " + yesterdayDate);

В моем часовом поясе (Европа / Копенгаген, в настоящее время согласен с Европой / Мадридом) я получил

Как в старом возрасте Дата: вс 17 марта 23:00:00 CET 2019

Ссылка

Учебное пособие по Oracle: Дата и время , объясняющее, как использовать java.time.

...