Wie kann man überprüfen, ob das Datum in Java in einem bestimmten Bereich liegt?

Wie überprüfe ich, ob das Datum in Java innerhalb eines bestimmten Bereichs liegt?

Ein Java-Beispiel zum Überprüfen, ob ein angegebenes Datum innerhalb eines Bereichs von 3 Monaten vor und nach dem aktuellen Datum liegt. Die Idee ist recht einfach: Verwenden Sie einfach die KlasseCalendar, um den Monat vor und zurück zu rollen, um einen „Datumsbereich“ zu erstellen, und verwenden SieDate.before() undDate.after(), um zu überprüfen, ob das Datum innerhalb liegt die Reichweite.

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

Siehe vollständiges Beispiel.

package com.example.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;
        }

    }

}

Ein einfacher Komponententest zum Nachweis des obigen Codes funktioniert ordnungsgemäß. Wenn Sie den Komponententest unterschreiten, werden alle Fälle bestanden.

package com.example.test;

import org.junit.*;
import com.example.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"));
    }

}

Alle Fälle werden übergeben und nach zusätzlichen Informationen auf der Konsole ausgegeben.

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