在java中生成随机日期时间(joda时间)

是否可以使用Jodatime生成随机日期时间,使得日期时间的格式为yyyy-MM-dd HH:MM:SS,它应该能够生成两个随机日期时间,其中Date2减去Date1将大于2分钟但小于60分钟。 请提出一些方法。

这严格遵循您的要求(校正后的格式除外)。

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的整个可能范围(或者日期)上生成随机DateTime的结果。 但是,如果需要,可以将结束时间限制在特定范围内的相同技术应用于开始时间。

简单

 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)); 

基于任何日期都可以用长数字表示的事实,看一下Date类的这个方法, http://docs.oracle.com/javase/1.4.2/docs/api/java/util/ Date.html #Date (long) ,你可以定义一个最大Date1,比如今天,并随机化添加的分钟数。

换一种说法 :

  • 步骤1 – 随机化一个长数字或为Date1设置一个数字
  • 第2步 – 随机化分钟添加,随机乘以58分钟(58 x 60 x 1000)并添加到Date1,再加上2分钟(2x 60 x 1000)

尝试

  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); 

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