在JAVA中生成特定范围内的随机日期

Ash*_*mar 6 java algorithm date

如何在JAVA中生成特定范围内的随机日期?我已经看到如何在Java中的特定范围内生成随机整数?生成随机数的链接.在JAVA中有类似/其他种类的方式来生成随机数吗?

Adr*_*hum 13

鉴于您的问题不明确,我希望您尝试java.util.Date使用给定范围生成随机数.

请注意,java.util.Date其中包含日期+时间信息.

Date在Java中,用EPOCH的毫秒数表示.因此,最简单的方法是做你想要的,给定d1和d2是Date,和d1 <d2(伪代码):

Date randomDate = new Date(ThreadLocalRandom.current()
                              .nextLong(d1.getTime(), d2.getTime()));
Run Code Online (Sandbox Code Playgroud)

如果它实际上是您想要生成的"日期"(没有时间),通常由LocalDate(在Java 8+中,或使用JODA时间)表示.

假设d1和d2 LocalDated1 < d2(伪代码)一样容易:

int days = Days.daysBetween(d1, d2).toDays();
LocalDate randomDate = d1.addDays(ThreadLocalRandom.nextInt(days+1));
Run Code Online (Sandbox Code Playgroud)

  • 在 Java 8 中,您必须先获取 ThreadLocalRandom 的实例才能调用 nextLong 方法。**ThreadLocalRandom.current()** 示例如下:`Date randomDate = new Date(ThreadLocalRandom.current().nextLong(d1.getTime(), d2.getTime()));` (2认同)

Sar*_*ana 8

试试这个

    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
Run Code Online (Sandbox Code Playgroud)

  • 为什么不使用 ThreadLocalRandom.current().nextLong(start, end)` 而不是创建流? (2认同)

rav*_*iru 7

你可以做这样的事情

    long random = ThreadLocalRandom.current().nextLong(startDate.getTime(), endDate.getTime());
    Date date = new Date(random);
Run Code Online (Sandbox Code Playgroud)