在Java中获取一天中随机时间戳的数量

时间:2015-06-28 09:31:32

标签: java random timestamp

这会是一个好方法吗?我希望在一天中随机出现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

这不太理想,因为我希望时间戳分散一点。为了解决这个问题,我创建了一个循环遍历已经添加到数组的所有时间戳的函数,并检查生成的时间戳是否至少比每个时间戳晚一个小时或更早。

但是,我不知道这是否是首选方式。似乎计算量很大。

1 个答案:

答案 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值。