ТЛ; др
java.lang.Math.abs (
ChronoUnit.DAYS.between(
LocalDate.parse( "2017/01/23".replace( "/" , "-" ) ) ,
LocalDate.parse( "2017/02/14".replace( "/" , "-" ) )
)
) > 3L
Использование java.time
Современный подход использует классы java.time , а не трудоемкие старые классы даты и времени (Date
, Calendar
и т. Д.).
Ваши входные строки практически соответствуют стандартному формату ISO 8601 для значений только для даты: ГГГГ-ММ-ДД. Для полного соответствия замените символы косой черты на дефис.
String inputA = "2017/01/23".replace( "/" , "-" ) ;
String inputB = "2017/02/14".replace( "/" , "-" ) ;
Классы java.time по умолчанию используют стандартные форматы при разборе / генерации строк. Поэтому не нужно указывать шаблон форматирования.
LocalDate ldA = LocalDate.parse( inputA );
LocalDate ldB = LocalDate.parse( inputB );
Остальная часть вашего Вопроса не имеет смысла, так как тестируется на +/- три миллисекунды, что не может быть правдой между датами. Видимо, вы хотели проверить количество дней. Для этого используйте перечисление ChronoUnit
.
long daysBetween = ChronoUnit.DAYS.between( ldA , ldB );
Если вторая дата действительно наступает за до первой даты, результатом является отрицательное число. Похоже, вы хотите проверить в любом случае, используя допуск ± 3. Используйте метод java.lang.Math
class ’abs
для проверки абсолютного значения нашего результата.
Метод ChronoUnit.DAYS.between
возвращает примитив long
. Таким образом, наш тест, сравнивающий этот результат с нашим пределом в три, должен соответствовать этому типу. Обратите внимание на использование L
, чтобы указать, что 3L
является примитивным значением три типа long
. Компилятор может обновить значение по умолчанию 3
с int
(32-разрядный) до long
(64-разрядный), но я предпочитаю быть явным, используя 3L
.
if( abs( daysBetween ) > 3L ) { … }
О java.time
Фреймворк java.time встроен в Java 8 и более поздние версии. Эти классы вытесняют старые классные устаревшие классы даты и времени, такие как java.util.Date
, Calendar
и & SimpleDateFormat
.
Проект Joda-Time , находящийся сейчас в режиме обслуживания , рекомендует перейти на классы java.time .
Чтобы узнать больше, см. Oracle Tutorial . И поиск переполнения стека для многих примеров и объяснений. Спецификация JSR 310 .
Где получить классы java.time?
Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java.time. Здесь вы можете найти некоторые полезные классы, такие как Interval
, YearWeek
, YearQuarter
и more .