Рубрики
Без рубрики

Как получить начало и конец дня с помощью Java

Изучите различные способы начала и окончания рабочего дня на Java.

Автор оригинала: baeldung.

1. Обзор

В этом коротком уроке мы узнаем, как получить начало и конец дня в Java , используя простые и понятные примеры для различных сценариев.

Мы будем использовать Java 8 Date/Time API для создания этих примеров.

Если вы хотите прочитать немного больше о библиотеке даты и времени Java 8, прежде чем продолжить, вы можете начать здесь .

2. Из объекта LocalDate

Прежде всего, давайте посмотрим, как мы можем получить начало или конец дня, заданного нам в качестве объекта LocalDate , например:

LocalDate localDate = LocalDate.parse("2018-06-23");

2.1. В день старта()

Самый простой способ получить LocalDateTime , представляющий начало определенного дня, – это использовать метод atStartOfDay() :

LocalDateTime startOfDay = localDate.atStartOfDay();

Этот метод перегружен, поэтому в случае, если мы хотим получить из него ZonedDateTime , мы можем сделать это, указав ZoneId :

ZonedDateTime startOfDay = localDate.atStartOfDay(ZoneId.of("Europe/Paris"));

2.2. из()

Другой способ, которым мы можем достичь того же результата, – это использовать метод of () , предоставляя Локальную дату и одно из статических полей LocalTime :

LocalDateTime startOfDay = LocalDateTime.of(localDate, LocalTime.MIDNIGHT);

Местное время предлагает следующие статические поля: ПОЛНОЧЬ (00:00), МИН (00:00), ПОЛДЕНЬ (12:00) и макс. (23:59:59.999999999).

Поэтому, если мы хотим получить конец дня, мы будем использовать значение MAX .

Давайте попробуем, но другим методом.

2.3. Время работы()

Этот метод перегружен, что позволяет нам указать желаемое время, используя часы, минуты, секунды или даже наносекунды.

В этом случае, в любом случае, мы будем использовать поле Местное время ‘s MAX в качестве аргумента, чтобы получить последний момент данного дня:

LocalDateTime startOfDay = localDate.atTime(LocalTime.MAX);

2.4. на дату()

Этот пример очень похож на предыдущие, но на этот раз мы будем использовать метод устаревший() объекта LocalTime , передавая LocalDate в качестве аргумента:

LocalDateTime endOfDate = LocalTime.MAX.atDate(localDate);

3. Из объекта LocalDateTime

Само собой разумеется, что мы можем получить из него Локальные данные , а затем использовать любой из методов раздела 2, чтобы получить из него конец или начало дня:

LocalDateTime localDateTime = LocalDateTime
  .parse("2018-06-23T05:55:55");
LocalDateTime endOfDate = localDateTime
  .toLocalDate().atTime(LocalTime.MAX);

Но в этом разделе мы проанализируем еще один метод получения объекта с его временным разделом, установленным на начало или конец дня, непосредственно из другого заданного LocalDateTime объекта.

3.1. с()

Все классы, реализующие Временный интерфейс , могут использовать этот метод .

В этом случае мы будем использовать сигнатуру метода, который принимает Временное поле (в частности, одно из значений перечисления ChronoField ) и аргумент long в качестве нового значения поля:

LocalDateTime endOfDate = localDateTime.with(ChronoField.NANO_OF_DAY, LocalTime.MAX.toNanoOfDay());

4. Из объекта ZonedDateTime

Если нам дано ZonedDateTime, мы можем использовать метод with () , поскольку он также реализует Временный интерфейс :

ZonedDateTime startofDay = zonedDateTime.with(ChronoField.HOUR_OF_DAY, 0);

5. Заключение

Подводя итог, мы проанализировали множество различных способов получить начало и конец дня в Java для многих различных сценариев.

Наконец, мы узнали об особенностях 8 классов библиотеки даты и времени Java и познакомились со многими ее классами и интерфейсами.

Как всегда, все примеры можно найти в нашем репозитории GitHub .