Генерация случайного времени даты в java (время joda)

можно ли сгенерировать случайное время datetime с помощью Jodatime таким образом, что datetime имеет формат yyyy-MM-dd HH:MM:SS, и он должен иметь возможность генерировать два случайных времени datetime, где Date2 минус Date1 будет больше 2 минут, но меньше 60 минут. Пожалуйста, предложите какой-нибудь метод.

5 ответов


Это следует довольно строго, что вы просили (за исключением исправлен формат).

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 (долго), Вы можете определить максимальное Date1, скажем, сегодня, и рандомизировать количество минут для добавления.

другими словами :

  • Шаг 1-рандомизируйте длинное число или установите число для Date1
  • Шаг 2-рандомизируйте минуты, чтобы добавить, умножить вкось 58 минут( 58 х 60 х 1000 ) и добавить в Дата1, плюс 2 минуты (2х 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);

вы можете генерировать случайное число, используя математику.случайность(); Вы можете использовать это значение