Рубрики
Без рубрики

Как проверить, находится ли дата в определенном диапазоне на Java?

– Как проверить, находится ли дата в определенном диапазоне на Java?

Пример Java, чтобы проверить, находится ли указанная дата в пределах 3 месяцев до и после текущей даты. Идея довольно проста, просто используйте Календарь класс для переноса месяца назад и вперед, чтобы создать “диапазон дат”, и используйте Date.before() и Дата.после() , чтобы проверить, находится ли дата в пределах диапазона.

if (dateToValidate.before(currentDateAfter3Months.getTime())
		&& dateToValidate.after(currentDateBefore3Months.getTime())) {

Смотрите полный пример.

package com.mkyong.date;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class DateValidator {

	public boolean isThisDateWithin3MonthsRange(String dateToValidate,
			String dateFromat) {

		SimpleDateFormat sdf = new SimpleDateFormat(dateFromat);
		sdf.setLenient(false);
		try {

			// if not valid, it will throw ParseException
			Date date = sdf.parse(dateToValidate);

			// current date after 3 months
			Calendar currentDateAfter3Months = Calendar.getInstance();
			currentDateAfter3Months.add(Calendar.MONTH, 3);

			// current date before 3 months
			Calendar currentDateBefore3Months = Calendar.getInstance();
			currentDateBefore3Months.add(Calendar.MONTH, -3);

			/*************** verbose ***********************/
			System.out.println("\n\ncurrentDate : "
					+ Calendar.getInstance().getTime());
			System.out.println("currentDateAfter3Months : "
					+ currentDateAfter3Months.getTime());
			System.out.println("currentDateBefore3Months : "
					+ currentDateBefore3Months.getTime());
			System.out.println("dateToValidate : " + dateToValidate);
			/************************************************/
			
			if (date.before(currentDateAfter3Months.getTime())
					&& date.after(currentDateBefore3Months.getTime())) {

				//ok everything is fine, date in range
				return true;

			} else {

				return false;

			}

		} catch (ParseException e) {

			e.printStackTrace();
			return false;
		}

	}

}

Простой модульный тест, чтобы доказать, что приведенный выше код работает правильно, если вы запустите модульный тест ниже, все случаи будут пройдены.

package com.mkyong.test;

import org.junit.*;
import com.mkyong.date.DateValidator;
import static org.junit.Assert.*;

public class DateValidatorRangeTest {

	private DateValidator dateValidator;

	@Before
	public void init() {
		dateValidator = new DateValidator();
	}

	@Test
	public void testDateWithinRange_1() {
		assertTrue(dateValidator.isThisDateWithin3MonthsRange("31/01/2012", "dd/MM/yyyy"));
	}

	@Test
	public void testDateWithinRange_2() {
		assertFalse(dateValidator.isThisDateWithin3MonthsRange("31/01/2011", "dd/MM/yyyy"));
	}
	
	@Test
	public void testDateWithinRange_3() {
		assertTrue(dateValidator.isThisDateWithin3MonthsRange("20/02/2012", "dd/MM/yyyy"));
	}
	
	@Test
	public void testDateWithinRange_4() {
		assertFalse(dateValidator.isThisDateWithin3MonthsRange("21/05/2012", "dd/MM/yyyy"));
	}
	
}

Все обращения передаются и выводятся после дополнительной информации на консоль.

currentDate : Mon Feb 20 13:36:59 SGT 2012
currentDateAfter3Months : Sun May 20 13:36:59 SGT 2012
currentDateBefore3Months : Sun Nov 20 13:36:59 SGT 2011
dateToValidate : 31/01/2012


currentDate : Mon Feb 20 13:36:59 SGT 2012
currentDateAfter3Months : Sun May 20 13:36:59 SGT 2012
currentDateBefore3Months : Sun Nov 20 13:36:59 SGT 2011
dateToValidate : 31/01/2011


currentDate : Mon Feb 20 13:36:59 SGT 2012
currentDateAfter3Months : Sun May 20 13:36:59 SGT 2012
currentDateBefore3Months : Sun Nov 20 13:36:59 SGT 2011
dateToValidate : 20/02/2012


currentDate : Mon Feb 20 13:36:59 SGT 2012
currentDateAfter3Months : Sun May 20 13:36:59 SGT 2012
currentDateBefore3Months : Sun Nov 20 13:36:59 SGT 2011
dateToValidate : 21/05/2012

Оригинал: “https://mkyong.com/java/how-to-check-if-date-is-within-a-certain-range-in-java/”