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

新手上路,请多包涵
阅读 930
2 个回答

鉴于您的问题不清楚,我希望您尝试生成具有给定范围的随机 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()));


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

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

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

原文由 Adrian Shum 发布,翻译遵循 CC BY-SA 4.0 许可协议

尝试这个

    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

原文由 Saravana 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题