2013-02-08 7 views
8

Ist es möglich, eine zufällige Datetime mit Jodatime zu generieren, so dass die Datetime das Format JJJJ-MM-TT HH: MM: SS hat und es zwei zufällige DatumZeiten generieren sollte wobei Date2 minus Date1 größer als 2 Minuten aber weniger als 60 Minuten ist. Bitte schlagen Sie eine Methode vor.Generieren zufälliger Datum Zeit in Java (joda Zeit)

Antwort

10

Dies folgt ganz genau, was Sie gefragt haben (außer für das korrigierte Format).

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)); 

Wenn Sie dies ausführen, werden Sie feststellen, dass Sie empörend Werte für Jahre erhalten werden, aber das ist nur die Folge eines zufälligen Datetime über den gesamten möglichen Bereich von Datetime zu erzeugen (oder Datum für diese Angelegenheit) . Aber die gleiche Technik der Begrenzung der Endzeit auf einen bestimmten Bereich kann auf die Startzeit angewendet werden, wenn Sie möchten.

11

Einfache

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

Dies erzeugt nur eine Zufallszahl mit den Daten 1970-01-01 weiß nicht warum. – chettyharish

+1

Ich denke, die letzte Zeile sollte sein: Timestamp rand = new Zeitstempel (rangebegin + (long) (Math.random() * diff); ' – saschoar

1

Basierend auf der Tatsache, dass jedes Datum durch eine lange Reihe dargestellt werden kann, auf diese Methode der Date-Klasse einen Blick darauf werfen, http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Date.html#Date(long), können Sie eine maximale Date1 definieren, lassen Sie uns heute sagen , und randomize die Anzahl der Minuten hinzufügen.

Mit anderen Worten:

  • Schritt 1 - eine lange Nummer randomisieren oder eine Nummer für die Date1
  • Schritt 2 festgelegt - die Minuten randomisieren hinzuzufügen, zufällige multiplizieren mit 58 Minuten (58 x 60 x 1000) und in der Date1, plus die 2 Minuten (2x 60 x 1000)
1

versuchen

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

können Sie mit Math.random() eine Zufallszahl erzeugen; Sie können diesen Wert verwenden