gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 13:42:56 25 4
gpt4 key购买 nike

解决这个问题的好方法是什么?我希望一天中随机显示一条消息 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

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

但是,我不知道这是否是首选方法。看起来计算量相当大。

最佳答案

我会为每个均匀间隔的时间段生成一个随机时间,如下所示:

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

关于java - 在Java中获取一天中的随机时间戳数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31098124/

25 4 0
文章推荐: java - Android - 如何选择没有本地化的 strings.xml
文章推荐: Javascript: TypeError: document.getElementById(...) 为 null 动态创建
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com