Я хочу проверить интервал времени

#java #android #time

#java #Android #время

Вопрос:

Я хочу проверить интервал B, находится ли он в интервале A или нет? Правильно ли мое решение?

решение:

 Date fromA;
Data toA;
Date fromB;
Date toB;
if(fromA.getTime() <= fromB.getTime() amp;amp;  toB.getTime() <= toA.getTime()){
// true
}
  

Ответ №1:

Ответ, если вы имеете в виду (не) перекрывающиеся диапазоны (вместо того, чтобы полностью содержаться внутри другого диапазона):

Проще всего убедиться в правильности исключения диапазонов; а затем отменить условие.

Диапазоны (a1, a2) и (b1, b2):

 boolean excluding = a2 <= b1 || b2 <= a1
boolean overlapping = a2 > b1 amp;amp; b2 > a1    // Negation
  

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

Ваш код должен быть неправильным. Правильно:

 if (tomA.getTime() >= fromB.getTime() amp;amp;  toB.getTime() >= fromAgetTime()) {
  

Поскольку getTime() возвращает длинный, ms sind 1970, в какой-то момент может произойти переполнение подписи.
Очень теоретически, но не так приятно.

Лучше было бы использовать порт нового java.time API, который предлагает больше функциональности и сделает условие читаемым.

Комментарии:

1. Я интерпретировал «B находится в интервале A», поскольку B является подмножеством A. Если это правильная интерпретация, условие OPs является правильным.

2. @Henry ты прав; все мои варианты использования касались перекрытия, а не сдерживания. Я добавлю соответствующий текст к своему ответу.

Ответ №2:

Ваш код проверяет, находится ли B в A, а не наоборот.