2016-10-26 36 views
3

JAVAの特定の範囲でランダムな日付を生成する方法は?私はHow do I generate random integers within a specific range in Java?ランダムなnumbers.Isを生成するためのリンクを見たことがある/ JAVAのランダムな日付を生成する方法の他の種類ですか?JAVAの特定の範囲でランダムな日付を生成する

+0

ような何かを行うことができますランダムタイムスタンプ。 – shmosel

+0

投稿する前に、スタックオーバーフローを完全に検索してください。 –

答えて

7

を試してみてください、私はあなたが与えられた範囲でランダムjava.util.Dateを生成しようとしている期待しています。

java.util.Dateには、日付+時刻情報が含まれています。

Dateは、EPOCHからミリ秒単位で表されます。したがって、あなたが欲しいものを行うための最も簡単な方法は、D1、D2はDateで与えられた、ある、および(擬似コードで)D1 < D2:

Date randomDate = new Date(ThreadLocalRandom.nextLong(d1.getTime(), d2.getTime())); 

それは実際に「日付」(ある場合には、時間なし通常はLocalDate(Java 8+またはJODA Timeを使用)で表されます。

d1 < d2(擬似コード)で、D1、D2がLocalDateていると仮定し、ように簡単です:

int days = Days.daysBetween(d1, d2).toDays(); 
LocalDate randomDate = d1.addDays(ThreadLocalRandom.nextInt(days+1)); 
3

あなたの質問が不明であることを考えると、この

LocalDate startDate = LocalDate.of(1990, 1, 1); //start date 
    long start = startDate.toEpochDay(); 
    System.out.println(start); 

    LocalDate endDate = LocalDate.now(); //end date 
    long end = endDate.toEpochDay(); 
    System.out.println(start); 

    long randomEpochDay = ThreadLocalRandom.current().longs(start, end).findAny().getAsLong(); 
    System.out.println(LocalDate.ofEpochDay(randomEpochDay)); // random date between the range 
+0

ストリームを作成するのではなく、 'ThreadLocalRandom.current()。nextLong(start、end)'を使わないのはなぜですか? – Tvaroh

4

あなただけの日付を作成し、この

long random = ThreadLocalRandom.current().nextLong(startDate.getTime(), endDate.getTime()); 
    Date date = new Date(random); 
関連する問題