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

Sam*_*ami 18 java random timestamp

我想生成一个随机时间戳并为其添加一个随机增量以生成第二个时间戳.那可能吗?

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

das*_*ght 48

您需要将随机数缩放到特定年份的范围内,并将年份的开头添加为偏移量.一年中的毫秒数从一年变为另一年(闰年有一天,某些年有闰分,等等),因此您可以在缩放前确定范围,如下所示:

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));
Run Code Online (Sandbox Code Playgroud)

  • @Priidu您需要添加"1"以确保获得随机值的全部范围.考虑这个例子:假设你得到的是'11`的偏移量和`15`的`end`.如果你删除`+ 1`,`diff`将是'4`.因此,`(long)(Math.random()*diff)`将从零到3',因为`Math.random()`严格小于`1.0`.这意味着你永远不会得到"15"的结果,这是不可取的. (5认同)

Ale*_*ets 6

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

Random r =new Random();
long unixtime=(long) (1293861599+r.nextDouble()*60*60*24*365);
Date d = new Date(unixtime);
Run Code Online (Sandbox Code Playgroud)