Как я могу определить, если дата находится между двумя датами в Java? [дубликат]
этот вопрос уже есть ответ здесь:
Java: как проверить, находится ли дата в определенном диапазоне?
11 ответов
Как я могу проверить, если дата находится между двумя другими датами, в том случае, когда все три даты представлены экземплярами java.util.Date?
11 ответов:
Если вы не знаете порядок значений 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 Времени 2.3 библиотека.
один из способов-использовать простой
isBeforeиisAfterметоды DateTime экземпляров. Кстати, DateTime в Joda-Time схож по концепции с java.утиль.Дата (момент времени на временной шкале Вселенной), но включает в себя часовой пояс.другой способ-построить интервал в Джода-времени. Элемент
containsметод проверяет, если данная дата и время происходит в пределах промежуток времени, охватываемый интервалом. Начало интервала является включительным, но конечная точка является исключительной. Этот подход известен как "полуоткрытый", символически[).см. оба способа в следующем примере кода.
преобразование java.утиль.Экземпляры даты в Joda-Time
DateTimeэкземпляров. Просто передайте дата экземпляр в конструктор типа 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 ) ) );используя интервальный подход вместо 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
между датами, включая конечные точки, можно записать как
public static boolean isDateInBetweenIncludingEndPoints(final Date min, final Date max, final Date date){ return !(date.before(min) || date.after(max)); }
возможно, вы захотите взглянуть на Джода Времени который является действительно хорошим 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()и сравнение полученного значения большого мирового.редактировать если вы уверены, что вам не придется иметь дело с датами до 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)
Comments