2016-10-20 7 views
0

ランダム生成日に関する質問があります。だから、私は何をしようとしていることは、私は100回の日付を生成するランダムにforループを使用し、デフォルトで1-12と年の間に月が2016年ランダム文字列形式の日付の後にある日付を生成します

Random rand = new Random(); 
int date = 1 + rand.nextInt((30 - 1) + 1); 
int month = 1 + rand.nextInt((12 - 1) + 1); 
if(month == 1){ 
    monthStr = "January"; 
}else if(month == 2){ 
    monthStr = "February"; 
}else if(month == 3){ 
    monthStr = "March"; 
}else if(month == 4){ 
    monthStr = "April"; 
}else if(month == 5){ 
    monthStr = "May"; 
}else if(month == 6){ 
    monthStr = "June"; 
}else if(month == 7){ 
    monthStr = "July"; 
}else if(month == 8){ 
    monthStr = "August"; 
}else if(month == 9){ 
    monthStr = "September"; 
}else if(month == 10){ 
    monthStr = "October"; 
}else if(month == 11){ 
    monthStr = "November"; 
}else if(month == 12){ 
    monthStr = "December"; 
} 

で、1-30の間の日を生成するIランダムであります。次に、文字列を追加して文字列配列リストに格納します。

ArrayList<String> dateTimeList = new ArrayList<String>(); 
dateTimeList.add(date + " " + monthStr + " 2016"); 

その後、私はリスト全体を別の方法に渡します。このメソッドでは、私は再度ランダムな日付を生成しようとしていますが、この場合、上記の日付の後に日付を生成する必要があります。

もう1つの言葉では、私がランダムに100の日付を生成したのは、出願日です。その後、私はリスト全体を別のメソッドに渡します。そのメソッドの中で、各ファイリング日付の後に別の100個の日付を生成する必要があります。

どのように私はこれを達成することができますか?私はランダムな日付を生成する他の方法があることを知っていますが、私は他の場所で使用するので、このようにすることをお勧めします。

ありがとうございます。

+0

私はそれらの日付をデータベースに挿入する予定であり、2016年1月25日などの特定の形式で動作するため、 – hyperfkcb

+1

その日付をミリ秒に変換して最小値として渡すことができますランダム関数に変換する。あなたはランダムに日付から取得した数字を解釈します。 – Erik

+0

@DimaSanすみません、スレッドの重複ではないと思います。そのスレッドが何を求めているのかは、条件なしでランダムな日付を生成することです。しかし、私が尋ねたのは、特定の日付の後にある日付を生成する方法です。 – hyperfkcb

答えて

3

でどのように私はあなたが新しい日付のAPIで最新のJavaを使用していると仮定します。

まず、例えば、可能な最も古い日付を作成します。

LocalDate baseDate = LocalDate.now(); //use today, OR 
LocalDate baseDate = LocalDate.of(2016, 11, 30); //use any date - you can randomize the year/month/date if you want 

次に、乱数を選択します。日付に数日または数ヶ月または数年を追加することができます。この数字は、その1つを表す必要があります。日を想定しましょう。

Integer maximumRandomValue = 100; //we want to add a number of days between 0-100 
Integer randomDays = (int)(maximumRandomValue*Math.random()); 

今ちょうどあなたの基準日に追加する:あなたは(あなたのデータベースのコードは、あなたのためにそれを処理することができるはずですが)文字列に変換したい場合にも

LocalDate randomDate = baseDate.plusDays(randomDays); 

は、ここにあります(あなたが質問で提供される形式を使用して)簡単な方法形式の詳細オプションについて

String dateAsString = DateTimeFormatter.ofPattern("d MMMM yyyy").format(randomDate); 

は、API docs of DateTimeFormatterを参照してください。

+0

日付の形式は何ですか? 2016年10月20日のようなものですか? – hyperfkcb

+0

LocalDateオブジェクトには特定の形式がありません。これはDate関連の情報です。私はちょうどあなたがそれを望む方法で日付の書式を設定する方法の例を追加 - 基本的にDateTimeFormatterクラスを使用します。それはあなたが好きな方法でそれをフォーマットすることができます。 – jderda

+0

申し訳ありませんが、それはこのように動作するようにそれをひねる方法があります:まず最初に私はランダムに100の日付を生成し、次にランダムに100の日付を生成します。今日の日付以降に100の日付を生成します。 – hyperfkcb

2

日付をミリ秒に変換し、ランダム関数を使用して大きな整数を生成することができます。この乱数をミリ秒単位で加算し、それを元に戻します。

ここでは=>

import java.math.BigInteger; 
import java.util.Date; 
import java.util.Random; 

    public class generateRandomDate { 

     public static void generateRandomDate(){ 

      Date d = new Date(); 
      System.out.println("Input Date ==> "+ d); 
      System.out.println("Input Milliseconds ==> "+ d.getTime()); 
      BigInteger randomBigInteger = nextRandomBigInteger(BigInteger.valueOf(d.getTime())); 
      System.out.println("RandomBinInteger ==> "+ randomBigInteger); 
      System.out.println("Next random Date ==> "+ new Date(d.getTime() + randomBigInteger.longValue())); 
     } 

     public static BigInteger nextRandomBigInteger(BigInteger n) { 
      Random rand = new Random(); 
      BigInteger result = new BigInteger(n.bitLength(), rand); 
      while(result.compareTo(n) >= 0) { 
       result = new BigInteger(n.bitLength(), rand); 
      } 
      return result; 
     } 
     public static void main(String[] args) { 
      generateRandomDate(); 
     } 


    } 
+0

あなたはいくつかの例を私に見せてもらえますか? – hyperfkcb

+0

解答をコードスニペットで更新しました。関数への入力でランダムな大整数生成を制御することができます。私は現在の日付の長い値をランダムジェネレータに渡しました。それがあなたを助けることを願って! – Khuzi

関連する問題