tl; dr
if (
LocalTime.now( ZoneId.of( "Africa/Tunis” ) )
.isBefore( LocalTime.of( 12 , 0 ) )
) {
… // Do morning stuff.
}
java.time
Другие ответы были правильными, но использовались устаревшие классы.Классы java.util.Date
/ .Calendar
были вытеснены структурой java.time , встроенной в Java 8 и более поздние версии.
Класс LocalTime
представляет время суток бездата и без часового пояса.
Создайте некоторые константы для вашего определения «утро», «день» и так далее.В реальной работе я бы использовал перечисление.Но я буду использовать здесь простую переменную для демонстрации.
LocalTime noon = LocalTime.of( 12 , 0 );
Часовой пояс имеет решающее значение для интерпретации времени суток.Время дня имеет значение только в контексте определенного часового пояса.Если он не указан, текущий часовой пояс JVM по умолчанию будет автоматически применяться автоматически.Я настоятельно рекомендую вам вместо этого всегда явно указывать желаемый / ожидаемый часовой пояс.Вы можете думать о ZonedDateTime
как о комбинации Instant
плюс часовой пояс (ZoneId
).
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime now = ZonedDateTime.now( zoneId );
Мы можемизвлечь LocalTime
из ZonedDateTime
в соответствии с назначенным часовым поясом.
LocalTime nowLocalTime = now.toLocalTime();
Сравнить с заданным временем.
Boolean isMorning = nowLocalTime.isBefore( noon );
Использовать Duration
*Класс 1038 * для представления промежутка времени в виде общего количества секунд плюс доля секунды в наносекундах.
ZonedDateTime todayNoon = now.adjustInto( noon );
Duration untilNoon = Duration.between( now , todayNoon );
Вывод по умолчанию Duration::toString
представляет собой строку вформат, определенный ISO 8601 .Пример PT38M2S
, который тридцать восемь минут и две секунды.Вы также можете запросить количество минут и т. Д.
Получив объект Duration от ZonedDateTime
, мы получим точный результат с учетом таких аномалий, как летнее время (DST).Если вы предпочитаете использовать общий 24-часовой расчет дня, передайте объекты LocalTime
в Duration.between
.