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

时间:2016-10-26 03:39:53

标签: java algorithm date

如何在JAVA中生成特定范围内的随机日期?我看到std::all_of链接生成随机数。是否有类似/其他方式在JAVA中生成随机日期?

3 个答案:

答案 0 :(得分:13)

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

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

Java中的

Date由EPOCH的毫秒表示。因此,给出你想要的最简单的方法是,给定d1和d2是Date,并且d1< d2(伪代码):

Date randomDate = new Date(ThreadLocalRandom.current()
                              .nextLong(d1.getTime(), d2.getTime()));

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

这很简单,假设d1和d2为LocalDated1 < d2(伪代码):

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

答案 1 :(得分:7)

试试这个

    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

答案 2 :(得分:7)

你可以做这样的事情

    long random = ThreadLocalRandom.current().nextLong(startDate.getTime(), endDate.getTime());
    Date date = new Date(random);