Узнайте, как получить начало и конец даты с помощью API дат Java, например, LocalDateTime и ZonedDateTime.
Нам может потребоваться получить эту информацию во многих случаях. Например, нам нужно отфильтровать события, которые произошли в разное время в течение одного дня, на основе временных меток событий.
1. Обзор
Теоретически, начало любого дня — это время полуночи, «00:00», когда этот день начинается. Аналогично, конец дня — это время «23:59:59.999999999» непосредственно перед полуночью.
В Java у нас есть следующие константы для представления этих моментов времени каждый день:
- LocalTime.MIN(и LocalTime.MIDNIGHT): время полуночи в начале дня.
- LocalTime.MAX: время непосредственно перед полуночью в конце дня.
Кроме того, доступен метод LocalDate.atStartOfDay(), который объединяет заданную LocalDate со временем полуночи для создания LocalDateTime в начале этой даты.
Не существует подобного метода, позволяющего легко завершить день.
2. Начало дня
Как обсуждалось выше, мы можем получить начало дня, используя константу LocalTime.MIN и метод atStartOfDay() следующими способами:
Получите начало даты с помощью метода atStartOfDay() как в локальном часовом поясе, так и в определенном часовом поясе.
//The date for which start of day needs to be foundLocalDate localDate = LocalDate.now();//Local date timeLocalDateTime startOfDay = localDate.atStartOfDay();//Current zoneZonedDateTime startOfDayInZone = localDate.atStartOfDay(ZoneId.systemDefault());//Specific ZoneZonedDateTime startOfDayInEurope = localDate.atStartOfDay(ZoneId.of("Europe/Paris"));
Получите начало даты с помощью метода LocalTime.MIN как в локальном часовом поясе, так и в определенном часовом поясе.
LocalDate localDate = LocalDate.now();//Local date timeLocalDateTime startOfDay1 = localDate.atTime(LocalTime.MIN);//orLocalDateTime startOfDay2 = LocalTime.MIN.atDate(localDate);//Current zoneZonedDateTime startOfDayInZone = localDate.atTime(LocalTime.MIN).atZone(ZoneId.systemDefault());//Specific ZoneZonedDateTime startOfDayInEurope = localDate.atTime(LocalTime.MIN).atZone(ZoneId.of("Europe/Paris"));
3. Проведение конца дня
Подобно началу дня, мы можем использовать константу LocalTime.MAX для определения конца даты, используя следующие методы:
LocalDate localDate = LocalDate.now();//Local date timeLocalDateTime endOfDay = localDate.atTime(LocalTime.MAX);LocalDateTime endOfDay1 = LocalTime.MAX.atDate(localDate);//Current zoneZonedDateTime endOfDayInZone = localDate.atTime(LocalTime.MAX).atZone(ZoneId.systemDefault());//Specific ZoneZonedDateTime endOfDayInEurope = localDate.atTime(LocalTime.MAX).atZone(ZoneId.of("Europe/Paris"));
4. Заключение
В этом коротком уроке мы научились получать начало и конец заданного дня. Эта информация полезна в случаях, когда нам нужно отфильтровать все события, произошедшие за один день, и других подобных сравнениях временных меток.