如何在JAVA中生成特定范围内的随机日期?我看到了如何在Java中生成特定范围内的随机整数?链接,用于生成随机数字。是否有类似或其他方法在JAVA中生成随机日期?
如何在JAVA中生成特定范围内的随机日期?我看到了如何在Java中生成特定范围内的随机整数?链接,用于生成随机数字。是否有类似或其他方法在JAVA中生成随机日期?
考虑到您的问题不够明确,我想您是在尝试生成给定范围内的随机java.util.Date
。
请注意,java.util.Date
包含日期和时间信息。
在Java中,Date
由自纪元以来的毫秒数表示。因此,实现您的需求最简单的方法是,假设d1和d2是Date
,且d1 < d2(伪代码):
Date randomDate = new Date(ThreadLocalRandom.current()
.nextLong(d1.getTime(), d2.getTime()));
如果你想生成一个实际上是“日期”(没有时间)的值,通常可以使用LocalDate
(在Java 8+中或使用JODA Time)进行表示。
只需假设d1和d2是LocalDate
,并且d1 < d2
(伪代码):
int days = Days.daysBetween(d1, d2).toDays();
LocalDate randomDate = d1.addDays(
ThreadLocalRandom.current().nextInt(days+1));
Date randomDate = new Date(ThreadLocalRandom.current().nextLong(d1.getTime(), d2.getTime()));
- Imtiaz Shakil Siddique试试这个
LocalDate startDate = LocalDate.of(1990, 1, 1); //start date
long start = startDate.toEpochDay();
System.out.println(start);
LocalDate endDate = LocalDate.now(); //end date
long end = endDate.toEpochDay();
System.out.println(start);
long randomEpochDay = ThreadLocalRandom.current().longs(start, end).findAny().getAsLong();
System.out.println(LocalDate.ofEpochDay(randomEpochDay)); // random date between the range
ThreadLocalRandom.current().nextLong(start, end)
而是创建一个流呢? - Tvaroh您可以这样做
long random = ThreadLocalRandom.current().nextLong(startDate.getTime(), endDate.getTime());
Date date = new Date(random);