获取rand值大于system.currentTimeMillis的方法

时间:2012-07-13 12:29:19

标签: java random

如何生成大于System.currentTimeInMillis()值的随机值。我使用Random object.how我可以获得最小范围为System.currentTimeInMillis()的值吗?

4 个答案:

答案 0 :(得分:8)

long value = System.currentTimeMillis() + (long)random.nextInt(range);

工作?

如果要强制执行严格大于System.currentTimeMillis()的值,请为其添加1。相应地设置范围以防止溢出(请参阅assylias的评论)。

根据评论编辑。

答案 1 :(得分:1)

如果您希望能够在整个范围System.currentTimeMillis()..Long.MAX_VALUE分配数字,这是一种方法:

long millis = System.currentTimeMillis();    
long l = Math.min(Long.MAX_VALUE - millis, Math.abs(random.nextLong())) + millis;

Long.MAX_VALUE会比其他结果更常见,但重要的是。

答案 2 :(得分:1)

要在currentTimeMillisLong.MAX_VALUE没有溢出之间统一分配时间,您可以使用:

long time = System.currentTimeMillis();
long randomFutureTime = Math.abs(random.nextLong()) % (Long.MAX_VALUE - time) + time;

答案 3 :(得分:1)

这对于实时创建对象很有用,并且两个对象不能具有相同的时间戳,因此您可以对它们进行排序。

我用作对象的UUID:

Const.DECAL_BIT = 20;
Const.DECAL_BIT_MASQUE = (Long.size() -1) -  next 20;

private final Long timeCreate = (System.currentTimeMillis() << Const.DECAL_BIT) 
       + (System.nanoTime() & Const.DECAL_BIT_MASQUE);

因此,您可以拥有100年的有效日期:您将内部日期时间乘以1M,并以纳秒精度计算一秒钟的时间。

阅读日期:Date d = Date((Long) timeCreate>> Const.DECAL_BIT);