如何生成大于 的值的随机值System.currentTimeInMillis()
。我使用Random
对象。如何获得最小范围为的值System.currentTimeInMillis()
?
问问题
135 次
4 回答
8
不
long value = System.currentTimeMillis() + (long)random.nextInt(range);
工作?
如果您要强制执行一个严格大于的值,请在其中System.currentTimeMillis()
添加一个额外的 1。相应地设置范围以防止溢出(请参阅assylias
的评论)。
根据评论编辑。
于 2012-07-13T12:30:25.590 回答
1
对于currentTimeMillis
和之间的时间均匀分布Long.MAX_VALUE
,没有溢出,您可以使用:
long time = System.currentTimeMillis();
long randomFutureTime = Math.abs(random.nextLong()) % (Long.MAX_VALUE - time) + time;
于 2012-07-13T12:46:41.317 回答
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);
于 2012-07-13T12:47:35.187 回答
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 将比这里的其他结果更常见,以防万一。
于 2012-07-13T12:37:13.383 回答