如何在java中生成随机时间戳?

2022-09-01 19:52:49

我想生成一个随机时间戳,并向其添加随机增量以生成第二个时间戳。这可能吗?

如果我传递随机长整型值来创建时间戳,并且我想随机生成该长整型值,那么生成此值以在2012年提供时间戳的约束是什么?


答案 1

您需要将随机数缩放到特定年份的范围内,并将年份的开始时间添加为偏移量。一年中毫秒数从一年更改为另一年(闰年有额外的一天,某些年份有闰分钟数,依此类推),因此您可以在缩放之前确定范围,如下所示:

long offset = Timestamp.valueOf("2012-01-01 00:00:00").getTime();
long end = Timestamp.valueOf("2013-01-01 00:00:00").getTime();
long diff = end - offset + 1;
Timestamp rand = new Timestamp(offset + (long)(Math.random() * diff));

答案 2

对于要传递到 Date 的示例,长整型值应介于 2012 年的 13253976001293861599 之间。请尝试使用此站点进行检查!要生成随机日期,您可以执行如下操作:

Random r =new Random();
long unixtime=(long) (1293861599+r.nextDouble()*60*60*24*365);
Date d = new Date(unixtime);