使用 JAVA 生成大于当前日期的随机日期

Generate random date greater than current date using JAVA

我想生成一个随机日期 (date2),它应该大于当前日期 (date1) 使用 JAVA

为了实现这一点,我尝试了以下 do-while 循环,但它 运行 不正确。

我怎样才能让它工作?还是有更好的方法来获得想要的结果?

P.S。 JAVA 不太好,所以非常感谢任何支持!

public static void main(String[] args) throws ParseException {

    do {

        Calendar c = Calendar.getInstance();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date date1 = sdf.parse(""+String.valueOf(c.get(Calendar.YEAR))+"-"+String.valueOf(c.get(Calendar.DAY_OF_MONTH))+"-"+String.valueOf(c.get(Calendar.DATE))+"");       
        Date date2 = sdf.parse(""+String.valueOf(c.get(Calendar.YEAR))+"-"+createRandomIntBetween(1, 12)+"-"+createRandomIntBetween(1, 28)+"");
        
    }
    
    while (date1.compareTo(date2) < 0);
    
}

public static int createRandomIntBetween(int start, int end) {
            return start + (int) Math.round(Math.random() * (end - start));
    }

以下解决方案将生成明天和一年后的随机日期

Random randomDays = ThreadLocalRandom.current();
LocalDateTime date = LocalDateTime.now().plusDays(randomDays.nextInt(365) + 1);

根据您想要的日期范围,您当然可以将 bound 参数更改为 nextInt.

日期和时间只是java中的一个int,我们可以简单地使用生成随机int的思想来生成2个日期之间的日期。

public static Date randomDateBetween(Date startDate, Date endDate) {
    long startMillis = startDate.getTime();
    long endMillis = endDate.getTime();
    long randomMillis = ThreadLocalRandom
      .current()
      .nextLong(startMillis, endMillis);

    return new Date(randomMillis);
}