Java 如何在给定时间的下一个小时内获得随机时间?

Java 如何在给定时间的下一个小时内获得随机时间?,java,datetime,date,Java,Datetime,Date,我有一个返回DateTime的对象。我需要在下个小时内生成一个随机时间 比如说 ZonedDateTime date1 = ZonedDateTime.now(); // returns 2020-01-29T15:00:00.934 ZonedDateTime date2 = ZonedDateTime.now(); // returns 2020-01-29T15:45:00.233 ZonedDateTime convertedDate1; ZonedDateTime converte

我有一个返回DateTime的对象。我需要在下个小时内生成一个随机时间

比如说

ZonedDateTime date1 = ZonedDateTime.now(); // returns  2020-01-29T15:00:00.934
ZonedDateTime date2 = ZonedDateTime.now(); // returns  2020-01-29T15:45:00.233
ZonedDateTime convertedDate1;
ZonedDateTime convertedDate2;

//Conversion logic

assertEquals("2020-01-29T15:37:56.345", convertedDate1.toString());
assertEquals("2020-01-29T16:22:22.678", convertedDate2.toString());

您可以使用生成
0-60之间的随机分钟数,并将其添加到
ZoneDateTime

ZonedDateTime result = date.plusMinutes(ThreadLocalRandom.current().nextInt(60));
同样,您也可以添加随机生成的秒数和纳秒数

ZonedDateTime result = date.plusMinutes(ThreadLocalRandom.current().nextInt(58))
                               .plusSeconds(ThreadLocalRandom.current().nextLong(59))
                               .plusNanos(ThreadLocalRandom.current().nextLong(999));
注意:nextInt(int-bound),nextLong(int-bound)将在0(包括)和特定绑定(不包括)之间生成

返回介于零(包含)和指定界限(独占)之间的伪随机整数值


您可以尝试下面的代码

long leftLimit = 1L;
long rightLimit = 3600000L;
long generatedLong = leftLimit + (long) (Math.random() * (rightLimit - leftLimit));

 long currentMillis = System.currentTimeMillis();
 long randomTime = currentMillis + generatedLong;

  Time time = new Time(currentMillis);

我得到的只是时间,但你可以同时得到日期和时间。

你能解释一下你想要达到什么目标吗?我想以前有人问过,也有人回答过。我的第一次搜索没有找到与您的问题完全匹配的问题,但是有许多类似的问题,所以如果您搜索得更努力一些,我希望它会出现。只使用过时的
日期
日历
类忽略答案。对于
0
59
(含)之间的随机数,更好/更精确:
…nextInt(60)
问题似乎是关于java.time(现代java日期和时间API)中的
ZonedDateTime
。在这种情况下,我认为没有必要启用
Time
类。它设计拙劣,早已过时,除了向SQL数据库发送和接收一天中的某个时间之外,它没有任何用途,而且显然不是提问者所要求的。要求是获得下一个小时的随机时间,我只是给他们一个想法,使用与否取决于他们的选择:-)