Как определить, существует ли дата между двумя датами в Java?

Как проверить, существует ли дата между двумя другими датами, в случае, когда все три даты представлены экземплярами java.util.Date ?

11 Solutions collect form web for “Как определить, существует ли дата между двумя датами в Java?”

Если вы не знаете порядок значений min / max

 Date a, b; // assume these are set to something Date d; // the date in question return a.compareTo(d) * d.compareTo(b) > 0; 

Если вы хотите, чтобы диапазон был включенным

 return a.compareTo(d) * d.compareTo(b) >= 0; 

Это может быть немного более читаемым:

 Date min, max; // assume these are set to something Date d; // the date in question return d.after(min) && d.before(max); 

Вот так:

 Date min, max; // assume these are set to something Date d; // the date in question return d.compareTo(min) >= 0 && d.compareTo(max) < = 0; 

Вы можете использовать > вместо >= и < вместо < = для исключения конечных точек из смысла "между".

Вот несколько способов сделать это, используя библиотеку Joda-Time 2.3.

Один из способов – использовать простые isBefore и isAfter для экземпляров DateTime . Кстати, DateTime в Joda-Time похож по идее на java.util.Date (момент времени на временной шкале Вseleniumной), но включает часовой пояс.

Другой способ – создать интервал в Joda-Time. Метод contains тесты, если заданное значение DateTime происходит в течение промежутка времени, охватываемого Интервалом. Начало Интервала включено, но конечная точка является исключительной. Этот подход известен как «Полуоткрытый», символически [) .

См. Оба варианта в следующем примере кода.

Преобразуйте экземпляры java.util.Date в экземпляры даты Joda-Time DateTime . Просто передайте экземпляр Date в конструктор DateTime. На практике вы также должны передать конкретный объект DateTimeZone а не полагаться на часовой пояс JVM по умолчанию.

 DateTime dateTime1 = new DateTime( new java.util.Date() ).minusWeeks( 1 ); DateTime dateTime2 = new DateTime( new java.util.Date() ); DateTime dateTime3 = new DateTime( new java.util.Date() ).plusWeeks( 1 ); 

Сравните путем тестирования до / после …

 boolean is1After2 = dateTime1.isAfter( dateTime2 ); boolean is2Before3 = dateTime2.isBefore( dateTime3 ); boolean is2Between1And3 = ( ( dateTime2.isAfter( dateTime1 ) ) && ( dateTime2.isBefore( dateTime3 ) ) ); 

Использование подхода Interval вместо isAfter / isBefore …

 Interval interval = new Interval( dateTime1, dateTime3 ); boolean intervalContainsDateTime2 = interval.contains( dateTime2 ); 

Сбросить консоль …

 System.out.println( "DateTimes: " + dateTime1 + " " + dateTime1 + " " + dateTime1 ); System.out.println( "is1After2 " + is1After2 ); System.out.println( "is2Before3 " + is2Before3 ); System.out.println( "is2Between1And3 " + is2Between1And3 ); System.out.println( "intervalContainsDateTime2 " + intervalContainsDateTime2 ); 

При запуске …

 DateTimes: 2014-01-22T20:26:14.955-08:00 2014-01-22T20:26:14.955-08:00 2014-01-22T20:26:14.955-08:00 is1After2 false is2Before3 true is2Between1And3 true intervalContainsDateTime2 true 

Другой вариант

 min.getTime() < = d.getTime() && d.getTime() <= max.getTime() 

Между датами В том числе конечные точки могут быть записаны как

 public static boolean isDateInBetweenIncludingEndPoints(final Date min, final Date max, final Date date){ return !(date.before(min) || date.after(max)); } 

Вы можете взглянуть на Joda Time, который является действительно хорошим API для работы с датой / временем. Даже если вам это действительно не нужно для решения вашего текущего вопроса, он обязательно спасет вас от боли в будущем.

 import java.util.Date; public class IsDateBetween { public static void main (String[] args) { IsDateBetween idb=new IsDateBetween("12/05/2010"); // passing your Date } public IsDateBetween(String dd) { long from=Date.parse("01/01/2000"); // From some date long to=Date.parse("12/12/2010"); // To Some Date long check=Date.parse(dd); int x=0; if((check-from)>0 && (to-check)>0) { x=1; } System.out.println ("From Date is greater Than ToDate : "+x); } } 

вы можете использовать getTime() и сравнить возвращаемые длинные значения UTC.

EDIT, если вы уверены, что вам не придется заниматься датами до 1970 года, не знаете, как это будет вести себя в этом случае.

Ну вот:

 public static void main(String[] args) throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy"); String oeStartDateStr = "04/01/"; String oeEndDateStr = "11/14/"; Calendar cal = Calendar.getInstance(); Integer year = cal.get(Calendar.YEAR); oeStartDateStr = oeStartDateStr.concat(year.toString()); oeEndDateStr = oeEndDateStr.concat(year.toString()); Date startDate = sdf.parse(oeStartDateStr); Date endDate = sdf.parse(oeEndDateStr); Date d = new Date(); String currDt = sdf.format(d); if((d.after(startDate) && (d.before(endDate))) || (currDt.equals(sdf.format(startDate)) ||currDt.equals(sdf.format(endDate)))){ System.out.println("Date is between 1st april to 14th nov..."); } else{ System.out.println("Date is not between 1st april to 14th nov..."); } } 

Вот как найти, составляет ли сегодня 2 месяца:

 private boolean isTodayBetween(int from, int to) { if (from < 0 || to < 0 || from > Calendar.DECEMBER || to > Calendar.DECEMBER) { throw new IllegalArgumentException("Invalid month provided: from = " + from + " to = " + to); } Date now = new Date(); GregorianCalendar cal = new GregorianCalendar(); cal.setTime(now); int thisMonth = cal.get(Calendar.MONTH); if (from > to) { to = to + Calendar.DECEMBER; thisMonth = thisMonth + Calendar.DECEMBER; } if (thisMonth >= from && thisMonth < = to) { return true; } return false; } 

и назовите его так:

 isTodayBetween(Calendar.OCTOBER, Calendar.MARCH) 
  • Почему exception.printStackTrace () считается плохой практикой?
  • Как красиво форматировать плавающие числа в String без ненужного десятичного числа 0?
  • Как отправить PUT, DELETE HTTP-запрос в HttpURLConnection?
  • Как выполнить файл сценария .sql с использованием JDBC
  • Это использование оператора «instanceof» считается плохим дизайном?
  • Проблемы с построением Java-проекта Github
  • Тестирование частного метода с использованием mockito
  • Получить перечисление по его внутреннему полю
  • Как найти кодировку по умолчанию или кодировку в Java?
  • Вычислить дни между двумя датами в Java 8
  • Java генерирует не повторяющиеся случайные числа
  • Interesting Posts

    Преобразование из двоичных данных в элемент управления изображением в ASP.NET

    Bootstrap 3 Карусель увядает с новым слайдом, а не сползает на новый слайд

    Где DNS получает IP-адрес и что должно произойти, если адрес должен измениться?

    Delphi: запрашивать повышение UAC при необходимости

    Как проверить, какие уведомления активны в строке состояния в Android Dev?

    Найти элемент управления по имени из элементов управления Windows Forms

    Образ Windows ISO от Linux на USB-накопитель

    Что произойдет, когда я вызову функцию-член на указателе объекта NULL?

    Есть ли метод, который вычисляет факториал в Java?

    Чтение и непрочитанное в mutt

    Могу ли я поставить / tmp и / var / log в ramdisk на OS X?

    😃 (и другие символы Unicode) в идентификаторах, недопустимых g ++

    Как распечатать stacktrace для исключения Android

    Формула Excel для выведения котировок

    Несколько функций с тем же именем

    Давайте будем гением компьютера.