2013-02-08 52 views
8

Có thể tạo một datetime ngẫu nhiên bằng cách sử dụng Jodatime sao cho datetime có định dạng yyyy-MM-dd HH: MM: SS và nó sẽ có thể tạo ra hai datetimes ngẫu nhiên trong đó Date2 trừ Date1 sẽ lớn hơn 2 phút nhưng nhỏ hơn 60 phút. Vui lòng đề xuất một số phương pháp.Tạo thời gian ngày ngẫu nhiên trong java (thời gian joda)

Trả lời

10

Điều này tuân theo đúng những gì bạn đã yêu cầu (ngoại trừ định dạng đã sửa).

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

Nếu bạn chạy này, bạn sẽ lưu ý rằng bạn sẽ nhận được giá trị thái quá trong nhiều năm, nhưng điều đó chỉ đơn giản là hậu quả của việc tạo ra một DateTime ngẫu nhiên trên toàn bộ phạm vi có thể của DateTime (hoặc ngày cho rằng vấn đề) . Nhưng cùng một kỹ thuật hạn chế thời gian kết thúc đến một phạm vi nhất định có thể được áp dụng cho thời gian bắt đầu nếu bạn muốn.

11

Simple

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

Điều này chỉ tạo ra một số ngẫu nhiên với ngày 1970-01-01 tại sao. – chettyharish

+1

Tôi nghĩ dòng cuối cùng nên là 'Dấu thời gian rand = Dấu thời gian mới (rangebegin + (long) (Math.random() * diff));' – saschoar

1

Dựa trên thực tế là ngày bất kỳ có thể được đại diện bởi một số dài, hãy xem trên phương pháp này của lớp Date, http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Date.html#Date(long), bạn có thể định nghĩa một Date1 tối đa, giả sử ngày nay và ngẫu nhiên số phút cần thêm.

Nói cách khác:

  • bước 1 - ngẫu nhiên một số dài hoặc đặt một số cho Date1
  • bước 2 - ngẫu nhiên phút để thêm, nhân ngẫu nhiên 58 phút (58 x 60 x 1000) và thêm vào Date1, cộng với 2 phút (2x 60 x 1000)
1

thử

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

bạn có thể tạo một số ngẫu nhiên bằng Math.random(); Bạn có thể sử dụng giá trị này

Các vấn đề liên quan