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