проверить, если продолжительность находится в диапазоне - PullRequest
1 голос
/ 17 марта 2020

У меня есть 3 длительности

// java.time.Duration
var sec1 = Duration.ofSeconds(1);
var sec2 = Duration.ofSeconds(2);
var min1 = Duration.ofMinutes(5);

, и я хочу проверить, находится ли sec2 между sec1 и min1. Как то так

    if(sec2.between(sec1, min1))

не работает.

Как я могу это сделать?

Обновление - Решение:

// tests if x is within start (inclusive) and end (inclusive)
boolean isBetween(Duration x, Duration start, Duration end) {
    return start.compareTo(x) <= 0 && x.compareTo(end) <= 0;
}

Ответы [ 3 ]

3 голосов
/ 17 марта 2020

Вы можете сделать следующее:

if(sec2.compareTo(sec1)>0  &&  sec2.compareTo(min1)<0)

Описание метода compareTo:

publi c int compareTo (Duration otherDuration) Сравнивает эту продолжительность с указанная продолжительность. Сравнение основано на общей продолжительности. Это «соответствует равным», как определено в Comparable. Параметры: otherDuration - другая длительность для сравнения, не ноль. Возвращает: значение компаратора, отрицательное, если меньше, положительное, если больше

2 голосов
/ 17 марта 2020
if (sec1.compareTo(sec2) <= 0 && sec2.compareTo(min1) <= 0)
0 голосов
/ 17 марта 2020

Чтобы узнать, что вы используете https://docs.oracle.com/javase/tutorial/datetime/iso/period.html Мгновенное значение - это то, что вы сравниваете, но оно также ложно, если оно отрицательное, поэтому вам все равно нужно убедиться, что компилятор не выбросит ошибка с вашим возвратом, в которой не используются символы Паренса , Попробуйте использовать данный тип, затем проверьте критерии. Если это функция, которую вы используете только для определенной c цели в течение одной продолжительности, необходимо обрабатывать различные случаи, такие как 0, ноль и выход за пределы диапазона.

class DurationComparator implements Comparator<Duration> {

  @Override
  public int compare(Duration o1, Duration o2) {
      int d1 = o1 == null ? 0 : o1.getDuration();
      int d2 = o2 == null ? 0 : o2.getDuration();
      return d2 - d1;
    }
 }

Это лучшее название для ваш метод все еще дает вам логическое значение при сравнении между ними, используя Instant. Ваше решение только видит, находится ли оно вне диапазона, поэтому, если вы ищете, находится ли оно между ними, вам нужно использовать сравнение, чтобы правильно проверить оба конца Длительности, чтобы это работало.

...