2013-02-08 2 views
8

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

ответ

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 в течение всего возможного диапазона 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 dunno why. – chettyharish

+1

Я думаю, что последняя строка должна быть 'Timestamp rand = new Timestamp (rangebegin + (long) (Math.random() * diff)); – saschoar

1

Исходя из того, что любая дата может быть представлена ​​длинным числом, посмотрите на этот метод класса 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)
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(); Вы можете использовать это значение