Проверьте, что Instant теперь происходит во время java.time.Period / Duration
Мое намерение состоит в том, чтобы установить условие в истинное только в течение периода.
java.time.*
API посмотрел, что мне нужно.
import java.time.Period
import java.time.LocalTime
import java.time.Instant
import java.time.Duration
// java.time.Period
LocalTime start = LocalTime.of(1, 20, 25, 1024);
LocalTime end = LocalTime.of(3, 22, 27, 1544);
Period period = Period.between(startDate, endDate);
// java.time.duration
Instant start = Instant.parse("2017-10-03T10:15:30.00Z")
Instant end = Instant.parse("2019-10-03T10:16:30.00Z")
Duration duration = Duration.between(start, end)
Instant now = Instant.now();
Как это проверить now
происходит в течение определенного периода / продолжительности?
Я не вижу прямого API.
Изменить: я нашел способ с java.time.Instant
// now, start and end are defined above
// if now is between start and end
if (now.isAfter(start) && now.isBefore(end)){
}
2 ответа
Вы ошибаетесь в том, что Period
а также Duration
являются.
Они расстояния (вычтите начало от конца). Period
с 01/03/2018 по 01/10/2018 точно так же, как в период с 05/04/1990 по 05/11/1990, то же самое для Duration
, Так что это ничего не значит спрашивать что-то вроде "3 января 2018 года через 3 месяца?"
Первое: простое решение:
LocalTime start = LocalTime.of(1, 20, 25, 1024);
LocalTime end = LocalTime.of(3, 22, 27, 1544);
LocalTime now = LocalTime.now()
boolean nowIsInTimeWindow = !(now.isBefore(start) || now.isAfter(end));
Тот же шаблон работает с LocalDate и LocalDateTime.
Второе: дополнительные мысли на ваш оригинальный пост:
now
никогда не случится "во время"period
или жеduration
, Оба - просто количество времени, например, "два дня" или "пять минут". Они не содержат информацию о начале или конце.Я бы предложил не смешивать
Instant
а такжеLocalDate
но использоватьLocalTime
вместоInstant
, Таким образом, вы согласны с часовым поясом:Local...
типы по определению не зависят от часового пояса.