Java provides different ways to determine if a certain date falls within a specified range. In this article, we’ll look at examples using the old java.util.Date
and java.util.Calendar
classes, as well as the newer Java Date Time API.
Using java.util.Date
and java.util.Calendar
Before Java 8, you’d have to use Date
or Calendar
to work with dates:
package org.kodejava.datetime;
import java.util.Calendar;
public class CheckDateRange {
public static void main(String[] args) {
Calendar start = Calendar.getInstance();
start.set(2024, Calendar.JANUARY, 1);
Calendar end = Calendar.getInstance();
end.set(2024, Calendar.DECEMBER, 31);
Calendar target = Calendar.getInstance();
target.set(2024, Calendar.JUNE, 15);
if ((target.after(start) || target.equals(start)) &&
(target.before(end) || target.equals(end))) {
System.out.println("The date is within the range.");
} else {
System.out.println("The date is not within the range.");
}
}
}
The disadvantage with this approach is the excessive verbosity and error-prone copy-pasting necessary for setting up the Calendar
instances.
The Java 8 Way – Using java.time.LocalDate
Java 8 introduced the new Java Date Time API, which replaced the inconsistent Date
and Calendar
classes with the more intuitive LocalDate
, LocalTime
, LocalDateTime
, and ZonedDateTime
. Here’s the same task performed using LocalDate
:
package org.kodejava.datetime;
import java.time.LocalDate;
public class AnotherCheckDateRange {
public static void main(String[] args) {
LocalDate startDate = LocalDate.of(2024, 1, 1);
LocalDate endDate = LocalDate.of(2024, 12, 31);
LocalDate targetDate = LocalDate.of(2024, 6, 15);
if ((!targetDate.isBefore(startDate)) && (!targetDate.isAfter(endDate))) {
System.out.println("The date is within the range.");
} else {
System.out.println("The date is not within the range.");
}
}
}
In this code, startDate
and endDate
define the range of dates. The targetDate
is the date you want to check.
The isBefore()
method returns true
if the targetDate
is before the startDate
, and the isAfter()
method returns true
if the targetDate
is after the endDate
. So, if targetDate
is not before the startDate
and not after the endDate
, it means that the targetDate
is between startDate
and endDate
(inclusive). If the targetDate
is exactly the same as startDate
or endDate
, this condition will also return true
.
This simplified API requires significantly less code and eliminates a number of potential bugs and inconsistencies.
Conclusion
The older java.util.Date
and java.util.Calendar
facilities for working with dates are widely considered difficult to use and error-prone. While they work for simple tasks, the newer Java Date Time API is recommended for all new applications due to its simplicity, consistency, and flexibility. It aligns with ISO standards and covers a comprehensive range of use-cases needed for date-time calculations. Migrating from older APIs to Java 8 Date Time API is likely advantageous for most projects.
- How do I get number of each day for a certain month in Java? - September 8, 2024
- How do I get operating system process information using ProcessHandle? - July 22, 2024
- How do I sum a BigDecimal property of a list of objects using Java Stream API? - July 22, 2024