如何生成大于System.currentTimeInMillis()
值的随机值。我使用Random
object.how我可以获得最小范围为System.currentTimeInMillis()
的值吗?
答案 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)
要在currentTimeMillis
和Long.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);