2013-02-08 22 views
8

Jodatimeを使用してdatetimeの形式がyyyy-MM-dd HH:MM:SSとなるランダムなdatetimeを生成することは可能ですか?2つのランダムな日付時刻ここで、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の全体の可能な範囲でのランダムな日時を生成した結果です。しかし、終了時間を一定の範囲に制限する同じ手法を、必要に応じて開始時間に適用することができます。

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の理由で乱数のみを生成します。 – 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 - 長い番号をランダム化または日付1
  • ステップ2の番号を設定 - 58 分(58×60によるランダム乗算、追加する分をランダム×1000)と日付1に追加し、プラス2分(2倍 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()を使用して乱数を生成することができます。 この値を使用することができます