Skip to content

Commit c75e67d

Browse files
authored
Merge pull request eugenp#8087 from mona-mohamadinia/BAEL-3398
[BAEL-3398]: Generating Random Dates
2 parents 2b62b76 + a3bc4d2 commit c75e67d

File tree

8 files changed

+195
-0
lines changed

8 files changed

+195
-0
lines changed
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.baeldung.random;
2+
3+
import java.util.Date;
4+
import java.util.concurrent.ThreadLocalRandom;
5+
6+
public class LegacyRandomDateTimes {
7+
8+
public static Date between(Date startInclusive, Date endExclusive) {
9+
long startMillis = startInclusive.getTime();
10+
long endMillis = endExclusive.getTime();
11+
long randomMillisSinceEpoch = ThreadLocalRandom.current().nextLong(startMillis, endMillis);
12+
13+
return new Date(randomMillisSinceEpoch);
14+
}
15+
16+
public static Date timestamp() {
17+
return new Date(ThreadLocalRandom.current().nextInt() * 1000L);
18+
}
19+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.baeldung.random;
2+
3+
import java.time.Instant;
4+
import java.util.concurrent.ThreadLocalRandom;
5+
6+
public class RandomDateTimes {
7+
8+
public static Instant timestamp() {
9+
return Instant.ofEpochSecond(ThreadLocalRandom.current().nextInt());
10+
}
11+
12+
public static Instant between(Instant startInclusive, Instant endExclusive) {
13+
long startSeconds = startInclusive.getEpochSecond();
14+
long endSeconds = endExclusive.getEpochSecond();
15+
long random = ThreadLocalRandom.current().nextLong(startSeconds, endSeconds);
16+
17+
return Instant.ofEpochSecond(random);
18+
}
19+
20+
public static Instant after(Instant startInclusive) {
21+
return between(startInclusive, Instant.MAX);
22+
}
23+
24+
public static Instant before(Instant upperExclusive) {
25+
return between(Instant.MIN, upperExclusive);
26+
}
27+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.baeldung.random;
2+
3+
import java.time.LocalDate;
4+
import java.util.concurrent.ThreadLocalRandom;
5+
6+
public class RandomDates {
7+
8+
public static LocalDate between(LocalDate startInclusive, LocalDate endExclusive) {
9+
long startEpochDay = startInclusive.toEpochDay();
10+
long endEpochDay = endExclusive.toEpochDay();
11+
long randomDay = ThreadLocalRandom.current().nextLong(startEpochDay, endEpochDay);
12+
13+
return LocalDate.ofEpochDay(randomDay);
14+
}
15+
16+
public static LocalDate date() {
17+
int hundredYears = 100 * 365;
18+
return LocalDate.ofEpochDay(ThreadLocalRandom.current().nextInt(-hundredYears, hundredYears));
19+
}
20+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.baeldung.random;
2+
3+
import java.time.LocalTime;
4+
import java.util.concurrent.ThreadLocalRandom;
5+
6+
public class RandomTimes {
7+
8+
public static LocalTime between(LocalTime startTime, LocalTime endTime) {
9+
int startSeconds = startTime.toSecondOfDay();
10+
int endSeconds = endTime.toSecondOfDay();
11+
int randomTime = ThreadLocalRandom.current().nextInt(startSeconds, endSeconds);
12+
13+
return LocalTime.ofSecondOfDay(randomTime);
14+
}
15+
16+
public static LocalTime time() {
17+
return between(LocalTime.MIN, LocalTime.MAX);
18+
}
19+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package com.baeldung.random;
2+
3+
import org.junit.jupiter.api.RepeatedTest;
4+
5+
import java.util.Date;
6+
import java.util.concurrent.TimeUnit;
7+
8+
import static org.assertj.core.api.Assertions.assertThat;
9+
10+
class LegacyRandomDateTimesUnitTest {
11+
12+
private static final Date MIN_DATE = new Date(Long.MIN_VALUE);
13+
private static final Date MAX_DATE = new Date(Long.MAX_VALUE);
14+
15+
@RepeatedTest(100)
16+
void givenARange_WhenGenTimestamp_ShouldBeInRange() {
17+
long aDay = TimeUnit.DAYS.toMillis(1);
18+
long now = new Date().getTime();
19+
20+
Date hundredYearsAgo = new Date(now - aDay * 365 * 100);
21+
Date tenDaysAgo = new Date(now - aDay * 10);
22+
23+
Date random = LegacyRandomDateTimes.between(hundredYearsAgo, tenDaysAgo);
24+
assertThat(random).isBetween(hundredYearsAgo, tenDaysAgo);
25+
}
26+
27+
@RepeatedTest(100)
28+
void givenNoRange_WhenGenTimestamp_ShouldGenerateRandomTimestamps() {
29+
Date random = LegacyRandomDateTimes.timestamp();
30+
31+
assertThat(random)
32+
.isNotNull()
33+
.isBetween(MIN_DATE, MAX_DATE);
34+
}
35+
36+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.baeldung.random;
2+
3+
import org.junit.jupiter.api.RepeatedTest;
4+
5+
import java.time.Duration;
6+
import java.time.Instant;
7+
8+
import static org.assertj.core.api.Assertions.assertThat;
9+
10+
class RandomDateTimesUnitTest {
11+
12+
@RepeatedTest(100)
13+
void givenNoRange_WhenGenTimestamp_ShouldGenerateRandomTimestamps() {
14+
Instant random = RandomDateTimes.timestamp();
15+
16+
assertThat(random).isBetween(Instant.MIN, Instant.MAX);
17+
}
18+
19+
@RepeatedTest(100)
20+
void givenARange_WhenGenTimestamp_ShouldBeInRange() {
21+
Instant hundredYearsAgo = Instant.now().minus(Duration.ofDays(100 * 365));
22+
Instant tenDaysAgo = Instant.now().minus(Duration.ofDays(10));
23+
24+
Instant random = RandomDateTimes.between(hundredYearsAgo, tenDaysAgo);
25+
assertThat(random).isBetween(hundredYearsAgo, tenDaysAgo);
26+
}
27+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.baeldung.random;
2+
3+
import org.junit.jupiter.api.RepeatedTest;
4+
5+
import java.time.LocalDate;
6+
import java.time.Month;
7+
8+
import static org.assertj.core.api.Assertions.assertThat;
9+
10+
class RandomDatesUnitTest {
11+
12+
@RepeatedTest(100)
13+
void givenNoRange_WhenGenDate_ShouldGenerateRandomDates() {
14+
LocalDate randomDay = RandomDates.date();
15+
16+
assertThat(randomDay).isAfter(LocalDate.MIN).isBefore(LocalDate.MAX);
17+
}
18+
19+
@RepeatedTest(100)
20+
void givenARange_WhenGenDate_ShouldBeInRange() {
21+
LocalDate start = LocalDate.of(1989, Month.OCTOBER, 14);
22+
LocalDate end = LocalDate.now();
23+
24+
LocalDate random = RandomDates.between(start, end);
25+
assertThat(random).isAfter(start).isBefore(end);
26+
}
27+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.baeldung.random;
2+
3+
import org.junit.jupiter.api.RepeatedTest;
4+
5+
import java.time.LocalTime;
6+
7+
import static org.assertj.core.api.Assertions.assertThat;
8+
9+
class RandomTimesUnitTest {
10+
11+
@RepeatedTest(100)
12+
void givenARange_WhenGenTime_ShouldBeInRange() {
13+
LocalTime morning = LocalTime.of(8, 30);
14+
LocalTime randomTime = RandomTimes.between(LocalTime.MIDNIGHT, morning);
15+
16+
assertThat(randomTime)
17+
.isAfter(LocalTime.MIDNIGHT).isBefore(morning)
18+
.isAfter(LocalTime.MIN).isBefore(LocalTime.MAX);
19+
}
20+
}

0 commit comments

Comments
 (0)