首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JAVA将时间拆分成多个时间间隔,并在一个时间间隔内随机获取时间

JAVA将时间拆分成多个时间间隔,并在一个时间间隔内随机获取时间
EN

Stack Overflow用户
提问于 2018-03-30 11:25:46
回答 3查看 365关注 0票数 0

我试着将时间分成相等的间隔,然后在间隔中随机选择一个时间。举个例子:将上午8点到晚上8点的时间分成4个(可以是2或3……)。我会得到8-11,11-2,2-5和5-8。然后在每个示例的间隔2中随机选择一个时间,并具有11:32:12。

我的函数是这样开始的

代码语言:javascript
复制
private static List<Interval> splitDateTime(long start, long end, int intervalNo) {
    long interval = (end - start) / intervalNo;
    List<Interval> list = new ArrayList<Interval>();
    for (long i = start + interval; i < end; i += interval) {
        list.add(new Interval(start, i));
        start=start + interval;
    }
    list.add(new Interval(start, end));

    for (Interval t:list){
        System.out.println(rant);
    }

    return list;
}

那么我该怎么做呢?你有没有一些库/代码/想法?乔达?

首先要感谢大家!

EN

回答 3

Stack Overflow用户

发布于 2018-03-30 11:58:36

从你的原始问题的评论中,看起来你在这里真正问的是如何在两个间隔之间获得一个随机的长值。这可以使用Random来完成。

代码语言:javascript
复制
import java.util.Random

Random rand = new Random();
long val = rand.nextLong(50); //Returns a random value between 0 and 49

因此,如果您想要获取某个间隔内的值:

代码语言:javascript
复制
long val = rand.nextLong([max]-[min]) + [min];

显然,将max替换为间隔的结束,将min替换为间隔的开始。

编辑:忘记提一下,这会给你一个值[min,max](不包括max)。如果您希望它包含在内,只需在范围中添加1:

代码语言:javascript
复制
long val = rand.nextLong([max]-[min]+1) + [min];
票数 0
EN

Stack Overflow用户

发布于 2018-03-30 11:59:13

在没有任何库的情况下,您可以在从您的方法获得间隔列表并获取所需的间隔列表后尝试此代码:

代码语言:javascript
复制
public long getRandomTimeFrom(Interval interval) {
    Random r = new Random(); // random instatnce can be shared as class (static) field
    return interval.getStart() + r.nextLong(interval.getEnd() - interval.getStart());
}
票数 0
EN

Stack Overflow用户

发布于 2018-03-30 13:04:55

这应该是可行的:

代码语言:javascript
复制
SecureRandom s = new SecureRandom();
public Interval randomInterval(long start, long end, int intervalNo) {
    if(intervalNo == 0 || end <= start || (end-start)/intervalNo <= 1){
        return null;
    }
    if(intervalNo == 1){
        return new Interval(start, end);
    }
    System.err.println(start + " "+ end+" "+ intervalNo);
    long interval = (end - start) / (intervalNo);
    long value = Math.abs(s.nextInt(intervalNo));
    long randomStart = start + (value*interval);
    long randomEnd  = start +  ((value+1)*interval);
    if(randomStart < start || randomStart > end || randomEnd <start || randomEnd > end || randomEnd < randomStart){
        throw  new RuntimeException("Start: "+start+" End: "+end+" RandomStart:"+randomStart+" RandomEnd:"+randomEnd);
    }
    return new Interval(randomStart, randomEnd);

}

@org.junit.Test
public void splitDateTime() {
    for(int i=0;i<100000;i++){
        int randomRange = Math.abs(s.nextInt())%100;
        long start = System.currentTimeMillis();
        long random = s.nextLong();
        long end = start +  (random %10000000+ System.currentTimeMillis())/10;
        System.err.println(i+": "+randomInterval(start, end, randomRange));
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49567971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档