这会是一个好方法吗?我希望在一天中随机出现5次信息。我目前使用以下方法生成时间戳:
List<Long> timestamps = new ArrayList<Long>();
long currentTimestamp = (long) (System.currentTimeMillis() / 1000L);
long endTimestamp = addHoursToTimestamp(8, currentTimestamp);
int n_timestamps = 5;
for (int i = 0; i < n_timestamps; i++) {
Long randomTime = currentTimestamp + Math.abs(new Random().nextLong()) % (endTimestamp-currentTimestamp);
timestamps.add(randomTime);
}
有时这很好用,我很好地分散了时间戳。当然,正如您可以想象的那样,有时候时间戳彼此非常接近,例如在这个例子中,第11小时有3个时间戳(在11:00-19:00的时间段内):
1435483835 Sun Jun 28 11:30:35 CEST 2015
1435501808 Sun Jun 28 16:30:08 CEST 2015
1435484646 Sun Jun 28 11:44:06 CEST 2015
1435495886 Sun Jun 28 14:51:26 CEST 2015
1435483799 Sun Jun 28 11:29:59 CEST 2015
这不太理想,因为我希望时间戳分散一点。为了解决这个问题,我创建了一个循环遍历已经添加到数组的所有时间戳的函数,并检查生成的时间戳是否至少比每个时间戳晚一个小时或更早。
但是,我不知道这是否是首选方式。似乎计算量很大。
答案 0 :(得分:0)
我会为每个均匀间隔的时间段生成一个随机时间,如下所示:
List<Long> timestamps = new ArrayList<Long>();
long currentTimestamp = (long) (System.currentTimeMillis() / 1000L);
int hourRange = 8;
int n_timestamps = 5;
double timePeriod = hourRange / (n_timestamps + 0.0);
Random rand = new Random();
for (int i = 0; i < n_timestamps; i++) {
long startTimestamp = addHoursToTimestamp(i, currentTimestamp);
long endTimestamp = addHoursToTimestamp(timePeriod, startTimestamp);
Long randomTime = startTimestamp + Math.abs(rand.nextLong()) % (endTimestamp-startTimestamp);
timestamps.add(randomTime);
}
因此,对于8小时的时间段,将为1小时36分钟的5个周期中的每个周期生成一个随机时间。
确保addHoursToTimeStamp()
可以接受double
值。