【发布时间】:2018-10-16 05:33:21
【问题描述】:
时间1:10:30 06/05/2018
时间 2:19:45 06/05 2018
我想在这两个时间之间选择一个随机时间。结果可能是 (13:15 06/05/2018)。
我查看了日历,但似乎它不支持像 range(time1, time2) 这样的方法
这种情况的解决方案是什么?谢谢。
【问题讨论】:
时间1:10:30 06/05/2018
时间 2:19:45 06/05 2018
我想在这两个时间之间选择一个随机时间。结果可能是 (13:15 06/05/2018)。
我查看了日历,但似乎它不支持像 range(time1, time2) 这样的方法
这种情况的解决方案是什么?谢谢。
【问题讨论】:
您应该首先将您的时间对象转换为long,如下所示(我想您已经有两个Calendar 对象)
long time1InLong = time1.getTimeInMillis();
long time2InLong = time2.getTimeInMillis();
然后你可以使用下面的代码来生成随机数
Random r = new Random();
long randomTime = r.nextLong(time2InLong - time1InLong) + time1InLong;
然后您可以将这个randomTime 转换回Calendar,如下所示
// Create a DateFormatter object for displaying date in specified format.
SimpleDateFormat formatter = new SimpleDateFormat("HH:mm dd/MM/yyyy");
// Create a calendar object that will convert the date and time value in milliseconds to date.
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(randomTime);
【讨论】:
我会使用这样的东西。
public static Calendar getRandomTime(Calendar begin, Calendar end){
Random rnd = new Random();
long min = begin.getTimeInMillis();
long max = end.getTimeInMillis();
long randomNum = min + rnd.nextLong()%(max - min + 1);
Calendar res = Calendar.getInstance();
res.setTimeInMillis(randomNum);
return res;
}
如果您有 API 21+,请使用 ThreadLocalRandom
public static Calendar getRandomTime(Calendar begin, Calendar end){
long randomNum = ThreadLocalRandom.current().nextLong(begin.getTimeInMillis(), end.getTimeInMillis() + 1);
Calendar res = Calendar.getInstance();
res.setTimeInMillis(randomNum);
return res;
}
【讨论】: