Merge pull request #7660 from drazen-nikolic/feature/BAEL-3140-comparing-dates
BAEL-3140: Comparing Dates in Java - examples.
This commit is contained in:
commit
76b69c3b00
|
@ -20,7 +20,13 @@
|
||||||
<artifactId>joda-time</artifactId>
|
<artifactId>joda-time</artifactId>
|
||||||
<version>${joda-time.version}</version>
|
<version>${joda-time.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.apache.commons</groupId>
|
||||||
|
<artifactId>commons-lang3</artifactId>
|
||||||
|
<version>${commons-lang3.version}</version>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<!-- https://mvnrepository.com/artifact/commons-validator/commons-validator -->
|
<!-- https://mvnrepository.com/artifact/commons-validator/commons-validator -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>commons-validator</groupId>
|
<groupId>commons-validator</groupId>
|
||||||
|
@ -63,6 +69,7 @@
|
||||||
<!-- testing -->
|
<!-- testing -->
|
||||||
<assertj.version>3.6.1</assertj.version>
|
<assertj.version>3.6.1</assertj.version>
|
||||||
<joda-time.version>2.10</joda-time.version>
|
<joda-time.version>2.10</joda-time.version>
|
||||||
|
<commons-lang3.version>3.9</commons-lang3.version>
|
||||||
<commons-validator.version>1.6</commons-validator.version>
|
<commons-validator.version>1.6</commons-validator.version>
|
||||||
<maven.compiler.source>1.9</maven.compiler.source>
|
<maven.compiler.source>1.9</maven.compiler.source>
|
||||||
<maven.compiler.target>1.9</maven.compiler.target>
|
<maven.compiler.target>1.9</maven.compiler.target>
|
||||||
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
package com.baeldung.date.comparison;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.ZoneId;
|
||||||
|
import java.time.ZonedDateTime;
|
||||||
|
|
||||||
|
import static java.time.temporal.ChronoUnit.*;
|
||||||
|
|
||||||
|
public class DateTimeComparisonUtils {
|
||||||
|
|
||||||
|
public static boolean isSameDay(LocalDateTime timestamp, LocalDate localDateToCompare) {
|
||||||
|
return timestamp.toLocalDate().isEqual(localDateToCompare);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isSameDay(LocalDateTime timestamp, LocalDateTime timestampToCompare) {
|
||||||
|
return timestamp.truncatedTo(DAYS).isEqual(timestampToCompare.truncatedTo(DAYS));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isSameHour(LocalDateTime timestamp, LocalDateTime timestampToCompare) {
|
||||||
|
return timestamp.truncatedTo(HOURS).isEqual(timestampToCompare.truncatedTo(HOURS));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isSameMinute(LocalDateTime timestamp, LocalDateTime timestampToCompare) {
|
||||||
|
return timestamp.truncatedTo(MINUTES).isEqual(timestampToCompare.truncatedTo(MINUTES));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isSameHour(ZonedDateTime zonedTimestamp, ZonedDateTime zonedTimestampToCompare) {
|
||||||
|
return zonedTimestamp.truncatedTo(HOURS).isEqual(zonedTimestampToCompare.truncatedTo(HOURS));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isSameHour(ZonedDateTime zonedDateTime, LocalDateTime localDateTime, ZoneId zoneId) {
|
||||||
|
return isSameHour(zonedDateTime, localDateTime.atZone(zoneId));
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,17 @@
|
||||||
|
package com.baeldung.date.comparison;
|
||||||
|
|
||||||
|
import org.apache.commons.lang3.time.DateUtils;
|
||||||
|
|
||||||
|
import java.util.Calendar;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
public class LegacyDateComparisonUtils {
|
||||||
|
|
||||||
|
public static boolean isSameDay(Date date, Date dateToCompare) {
|
||||||
|
return DateUtils.isSameDay(date, dateToCompare);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isSameHour(Date date, Date dateToCompare) {
|
||||||
|
return DateUtils.truncatedEquals(date, dateToCompare, Calendar.HOUR);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,75 @@
|
||||||
|
package com.baeldung.date.comparison;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.ZoneId;
|
||||||
|
import java.time.ZonedDateTime;
|
||||||
|
|
||||||
|
import static org.hamcrest.Matchers.is;
|
||||||
|
import static org.junit.Assert.assertThat;
|
||||||
|
|
||||||
|
class DateTimeComparisonUtilsUnitTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenLocalDateTimes_whenIsSameDay_thenCompareTrue() {
|
||||||
|
LocalDateTime firstTimestamp = LocalDateTime.of(2019, 8, 10, 11, 00, 0);
|
||||||
|
LocalDateTime secondTimestamp = firstTimestamp.plusHours(5);
|
||||||
|
LocalDateTime thirdTimestamp = firstTimestamp.plusDays(1);
|
||||||
|
|
||||||
|
assertThat(DateTimeComparisonUtils.isSameDay(firstTimestamp, secondTimestamp), is(true));
|
||||||
|
|
||||||
|
assertThat(DateTimeComparisonUtils.isSameDay(secondTimestamp, thirdTimestamp), is(false));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenLocalDateAndLocalDateTime_whenIsSameDay_thenCompareTrue() {
|
||||||
|
LocalDate localDate = LocalDate.of(2019, 8, 10);
|
||||||
|
LocalDateTime localDateTime = LocalDateTime.of(2019, 8, 10, 11, 30, 0);
|
||||||
|
|
||||||
|
assertThat(DateTimeComparisonUtils.isSameDay(localDateTime, localDate), is(true));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenLocalDateTimes_whenIsSameHour_thenCompareTrue() {
|
||||||
|
LocalDateTime firstTimestamp = LocalDateTime.of(2019, 8, 10, 8, 00, 0);
|
||||||
|
LocalDateTime secondTimestamp = firstTimestamp.plusMinutes(15);
|
||||||
|
LocalDateTime thirdTimestamp = firstTimestamp.plusHours(2);
|
||||||
|
|
||||||
|
assertThat(DateTimeComparisonUtils.isSameHour(firstTimestamp, secondTimestamp), is(true));
|
||||||
|
|
||||||
|
assertThat(DateTimeComparisonUtils.isSameHour(secondTimestamp, thirdTimestamp), is(false));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenLocalDateTimes_whenIsSameMinute_thenCompareTrue() {
|
||||||
|
LocalDateTime firstTimestamp = LocalDateTime.of(2019, 8, 10, 8, 15, 0);
|
||||||
|
LocalDateTime secondTimestamp = firstTimestamp.plusSeconds(30);
|
||||||
|
LocalDateTime thirdTimestamp = firstTimestamp.plusMinutes(5);
|
||||||
|
|
||||||
|
assertThat(DateTimeComparisonUtils.isSameMinute(firstTimestamp, secondTimestamp), is(true));
|
||||||
|
|
||||||
|
assertThat(DateTimeComparisonUtils.isSameMinute(secondTimestamp, thirdTimestamp), is(false));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenZonedDateTimes_whenIsSameHour_thenCompareTrue() {
|
||||||
|
ZonedDateTime zonedTimestamp = ZonedDateTime.of(2019, 8, 10, 8, 0, 0, 30,
|
||||||
|
ZoneId.of("America/New_York"));
|
||||||
|
ZonedDateTime zonedTimestampToCompare = ZonedDateTime.of(2019, 8, 10, 14, 0, 0, 0,
|
||||||
|
ZoneId.of("Europe/Berlin"));
|
||||||
|
|
||||||
|
assertThat(DateTimeComparisonUtils.isSameHour(zonedTimestamp, zonedTimestampToCompare), is(true));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenZonedDateTimeAndLocalDateTime_whenIsSameHour_thenCompareTrue() {
|
||||||
|
ZonedDateTime zonedTimestamp = ZonedDateTime.of(2019, 8, 10, 8, 15, 0, 0,
|
||||||
|
ZoneId.of("America/New_York"));
|
||||||
|
LocalDateTime localTimestamp = LocalDateTime.of(2019, 8, 10, 14, 20, 0);
|
||||||
|
ZoneId zoneId = ZoneId.of("Europe/Berlin");
|
||||||
|
|
||||||
|
assertThat(DateTimeComparisonUtils.isSameHour(zonedTimestamp, localTimestamp, zoneId), is(true));
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,83 @@
|
||||||
|
package com.baeldung.date.comparison;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import java.time.*;
|
||||||
|
|
||||||
|
import static org.hamcrest.Matchers.is;
|
||||||
|
import static org.junit.Assert.assertThat;
|
||||||
|
|
||||||
|
public class Java8DateTimeApiGeneralComparisonsUnitTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenLocalDates_whenComparing_thenAssertsPass() {
|
||||||
|
LocalDate firstDate = LocalDate.of(2019, 8, 10);
|
||||||
|
LocalDate secondDate = LocalDate.of(2019, 7, 1);
|
||||||
|
LocalDate thirdDate = LocalDate.of(2019, 7, 1); // same date as secondDate
|
||||||
|
|
||||||
|
assertThat(firstDate.isAfter(secondDate), is(true));
|
||||||
|
assertThat(firstDate.isBefore(secondDate), is(false));
|
||||||
|
|
||||||
|
assertThat(firstDate.isEqual(secondDate), is(false));
|
||||||
|
assertThat(firstDate.equals(secondDate), is(false));
|
||||||
|
|
||||||
|
assertThat(firstDate.compareTo(secondDate), is(1));
|
||||||
|
assertThat(secondDate.compareTo(firstDate), is(-1));
|
||||||
|
|
||||||
|
assertThat(secondDate.isAfter(thirdDate), is(false));
|
||||||
|
assertThat(secondDate.isBefore(thirdDate), is(false));
|
||||||
|
assertThat(secondDate.isEqual(thirdDate), is(true));
|
||||||
|
assertThat(secondDate.equals(thirdDate), is(true));
|
||||||
|
assertThat(secondDate.compareTo(thirdDate), is(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenLocalDateTimes_whenComparing_thenAssertsPass() {
|
||||||
|
LocalDateTime firstTimestamp = LocalDateTime.of(2019, 8, 10, 11, 30, 0);
|
||||||
|
LocalDateTime secondTimestamp = LocalDateTime.of(2019, 8, 10, 11, 15, 0);
|
||||||
|
LocalDateTime thirdTimestamp = LocalDateTime.of(2019, 8, 10, 11, 15, 0); // same as secondTimestamp
|
||||||
|
|
||||||
|
assertThat(firstTimestamp.isAfter(secondTimestamp), is(true));
|
||||||
|
assertThat(firstTimestamp.isBefore(secondTimestamp), is(false));
|
||||||
|
|
||||||
|
assertThat(firstTimestamp.isEqual(secondTimestamp), is(false));
|
||||||
|
assertThat(firstTimestamp.equals(secondTimestamp), is(false));
|
||||||
|
|
||||||
|
assertThat(firstTimestamp.compareTo(secondTimestamp), is(1));
|
||||||
|
assertThat(secondTimestamp.compareTo(firstTimestamp), is(-1));
|
||||||
|
|
||||||
|
assertThat(secondTimestamp.isAfter(thirdTimestamp), is(false));
|
||||||
|
assertThat(secondTimestamp.isBefore(thirdTimestamp), is(false));
|
||||||
|
assertThat(secondTimestamp.isEqual(thirdTimestamp), is(true));
|
||||||
|
assertThat(secondTimestamp.compareTo(thirdTimestamp), is(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenZonedDateTimes_whenComparing_thenAssertsPass() {
|
||||||
|
ZonedDateTime timeInNewYork = ZonedDateTime.of(2019, 8, 10, 8, 0, 0, 0,
|
||||||
|
ZoneId.of("America/New_York"));
|
||||||
|
ZonedDateTime timeInBerlin = ZonedDateTime.of(2019, 8, 10, 14, 0, 0, 0,
|
||||||
|
ZoneId.of("Europe/Berlin"));
|
||||||
|
|
||||||
|
assertThat(timeInNewYork.isAfter(timeInBerlin), is(false));
|
||||||
|
assertThat(timeInNewYork.isBefore(timeInBerlin), is(false));
|
||||||
|
|
||||||
|
assertThat(timeInNewYork.isEqual(timeInBerlin), is(true));
|
||||||
|
assertThat(timeInNewYork.equals(timeInBerlin), is(false));
|
||||||
|
|
||||||
|
assertThat(timeInNewYork.compareTo(timeInBerlin), is(-1));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void givenLocalTimes_whenComparing_thenAssertsPass() {
|
||||||
|
LocalTime firstTime = LocalTime.of(8, 30);
|
||||||
|
LocalTime secondTime = LocalTime.of(9, 45);
|
||||||
|
|
||||||
|
assertThat(firstTime.isAfter(secondTime), is(false));
|
||||||
|
assertThat(firstTime.isBefore(secondTime), is(true));
|
||||||
|
|
||||||
|
assertThat(firstTime.equals(secondTime), is(false));
|
||||||
|
|
||||||
|
assertThat(firstTime.compareTo(secondTime), is(-1));
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,54 @@
|
||||||
|
package com.baeldung.date.comparison;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.ZoneId;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
import static org.hamcrest.Matchers.is;
|
||||||
|
import static org.junit.Assert.assertThat;
|
||||||
|
|
||||||
|
class LegacyDateComparisonUtilsUnitTest {
|
||||||
|
|
||||||
|
private Date toDate(LocalDateTime localDateTime) {
|
||||||
|
return Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenDatesWithDifferentHours_whenIsSameDay_thenReturnsTrue() {
|
||||||
|
Date firstDate = toDate(LocalDateTime.of(2019, 8, 10, 11, 00, 00));
|
||||||
|
Date secondDate = toDate(LocalDateTime.of(2019, 8, 10, 12, 00, 00));
|
||||||
|
Date thirdDate = toDate(LocalDateTime.of(2019, 8, 15, 12, 00, 00));
|
||||||
|
|
||||||
|
assertThat(LegacyDateComparisonUtils.isSameDay(firstDate, secondDate), is(true));
|
||||||
|
assertThat(LegacyDateComparisonUtils.isSameDay(secondDate, thirdDate), is(false));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenDatesWithingSameHour_whenIsSameHour_thenReturnsTrue() {
|
||||||
|
Date firstDate = toDate(LocalDateTime.of(2019, 8, 10, 11, 00, 00));
|
||||||
|
Date secondDate = toDate(LocalDateTime.of(2019, 8, 10, 11, 15, 00));
|
||||||
|
Date thirdDate = toDate(LocalDateTime.of(2019, 8, 10, 12, 00, 00));
|
||||||
|
|
||||||
|
assertThat(LegacyDateComparisonUtils.isSameHour(firstDate, secondDate), is(true));
|
||||||
|
assertThat(LegacyDateComparisonUtils.isSameHour(secondDate, thirdDate), is(false));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void givenDates__whenComparing_thenAssertsPass() {
|
||||||
|
Date firstDate = toDate(LocalDateTime.of(2019, 8, 10, 0, 00, 00));
|
||||||
|
Date secondDate = toDate(LocalDateTime.of(2019, 8, 15, 0, 00, 00));
|
||||||
|
Date thirdDate = toDate(LocalDateTime.of(2019, 8, 15, 0, 00, 00)); // same date as secondDate
|
||||||
|
|
||||||
|
assertThat(firstDate.after(secondDate), is(false));
|
||||||
|
assertThat(firstDate.before(secondDate), is(true));
|
||||||
|
assertThat(firstDate.compareTo(secondDate), is(-1));
|
||||||
|
assertThat(firstDate.equals(secondDate), is(false));
|
||||||
|
|
||||||
|
assertThat(thirdDate.after(secondDate), is(false));
|
||||||
|
assertThat(thirdDate.before(secondDate), is(false));
|
||||||
|
assertThat(thirdDate.compareTo(secondDate), is(0));
|
||||||
|
assertThat(thirdDate.equals(secondDate), is(true));
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue