2013-02-08 186 views

回答

10

在此之前相当严格的你问什么(除了更正格式)。

Random random = new Random(); 

DateTime startTime = new DateTime(random.nextLong()).withMillisOfSecond(0); 

Minutes minimumPeriod = Minutes.TWO; 
int minimumPeriodInSeconds = minimumPeriod.toStandardSeconds().getSeconds(); 
int maximumPeriodInSeconds = Hours.ONE.toStandardSeconds().getSeconds(); 

Seconds randomPeriod = Seconds.seconds(random.nextInt(maximumPeriodInSeconds - minimumPeriodInSeconds)); 
DateTime endTime = startTime.plus(minimumPeriod).plus(randomPeriod); 

DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss"); 

System.out.println(dateTimeFormatter.print(startTime)); 
System.out.println(dateTimeFormatter.print(endTime)); 

如果你运行它,你会注意到,你会得到离谱值多年,但是这只是在整个可能范围的日期时间生成一个随机的DateTime的结果(或日期为此事) 。但是,如果需要,将限制结束时间限制到一定范围的技术也可以应用于开始时间。

11

简单

long rangebegin = Timestamp.valueOf("2013-02-08 00:00:00").getTime(); 
long rangeend = Timestamp.valueOf("2013-02-08 00:58:00").getTime(); 
long diff = rangeend - rangebegin + 1; 
Timestamp rand = new Timestamp(rangebegin + (long)(Math.random() * diff)); 
+1

这就生成只与日期1970-01-01不知道为什么一个随机数。 – chettyharish 2013-02-08 12:23:49

+1

我认为最后一行应该是'Timestamp rand = new Timestamp(rangebegin +(long)(Math.random()* diff));'' – saschoar 2014-04-15 13:40:46

1

基于一个事实,即任何日期可通过较长的数字来表示,采取Date类,http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Date.html#Date(long)的这个方法一看,你可以定义一个最大日期1,我们说今天,并随机分配添加的分钟数。

换句话说:

  • 步骤1 - 将随机长数目或设置数为日期1
  • 步骤2 - 随机化分钟加,乘随机由58 分钟(58×60 ×1000),并添加到日期1,再加上2分钟(2× 60×1000)
1

尝试

Random r = new Random(); 
    long t1 = System.currentTimeMillis() + r.nextInt(); 
    long t2 = t1 + 2 * 60 * 1000 + r.nextInt(60 * 1000) + 1; 
    DateTime d1 = new DateTime(t1); 
    DateTime d2 = new DateTime(t2); 
-2

您可以使用Math.random()生成一个随机数; 您可以使用这项值