#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, а не наоборот.