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

时间:2013-02-08 11:45:59

标签: java jodatime random-sample

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

5 个答案:

答案 0 :(得分:12)

简单

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 :(得分:11)

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

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的结果。但是,如果需要,可以将结束时间限制在特定范围内的相同技术应用于开始时间。

答案 2 :(得分:1)

基于任何日期都可以用长数表示的事实,看一下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)

答案 3 :(得分: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);

答案 4 :(得分:-2)

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