Возможно ли генерировать случайное дату-время с использованием Jodatime, так что datetime имеет формат yyyy-MM-dd HH: MM: SS и он должен иметь возможность генерировать два случайных времени где Date2 минус Date1 будет больше 2 минут, но менее 60 минут. Пожалуйста, предложите какой-нибудь метод.Генерация случайного времени времени в java (время в joda)
ответ
Это следует строго, что вы просили (за исключением исправленного формата).
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), вы можете определить максимальный Дата1, скажем сегодня , и рандомизируйте количество минут для добавления.
Другими словами:
- шаг 1 - рандомизировать длинный номер или набор номера для Date1
- шаг 2 - рандомизации минут, чтобы добавить, умножать случайным образом на 58 минут (58 х 60 х 1000) и добавить к Date1, плюс 2 минуты (2x 60 х 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(); Вы можете использовать это значение
Это генерирует только случайное число с датами 1970-01-01 dunno why. – chettyharish
Я думаю, что последняя строка должна быть 'Timestamp rand = new Timestamp (rangebegin + (long) (Math.random() * diff)); – saschoar