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
Đ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.
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));
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)
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);
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
- 1. Thời gian Joda, Nhận ngày trong tuần
- 2. Thêm Thời gian Joda
- 3. Thời gian Joda chuyển đổi thời gian 'quá sớm'
- 4. Khoảng thời gian LocalDate trong thời gian Joda
- 5. Joda Thời phút trong một thời gian hoặc khoảng
- 6. srand (thời gian (0)) và tạo số ngẫu nhiên
- 7. hiệu quả tạo ra một mẫu ngẫu nhiên của thời gian và ngày giữa hai ngày
- 8. So sánh hai ngày sử dụng thời gian Joda
- 9. Thời gian Joda, Khoảng thời gian đến tổng số milli
- 10. Thời gian trong java
- 11. Sơ đồ trang web ngẫu nhiên ngắt theo thời gian
- 12. Thời gian Android và Java Thời gian
- 13. Lỗi thời gian chờ ngẫu nhiên với Pika và gevent
- 14. Thời gian Joda - Nhận tên múi giờ?
- 15. Thời gian Joda: sự khác nhau giữa Thời gian, Khoảng thời gian và Thời lượng là gì?
- 16. Java: giá trị lâu ngẫu nhiên trong một khoảng thời gian
- 17. Thời gian ngày trong Groovy
- 18. Tạo thời gian UTC trong java
- 19. Tạo một GUID ngẫu nhiên trong C# trong một khoảng thời gian cụ thể
- 20. Java: chọn một vài số ngẫu nhiên khác nhau từ mảng trong một thời gian
- 21. Chuyển đổi thời gian Epoch sang định dạng ngày tháng và thời gian trong Java
- 22. Tính chênh lệch tháng trong Thời gian Joda
- 23. Tính ngày kết thúc trong khi bỏ qua ngày lễ + thời gian Joda
- 24. ElasticSearch không ánh xạ định dạng thời gian JODA
- 25. Kết quả lẻ trong Thời gian Joda cho 01.04.1893
- 26. Ghi thời gian nhóm theo ngày, không theo thời gian
- 27. Tạo số ngẫu nhiên đồng thời
- 28. Thời gian Joda - Chuyển đổi đối tượng Lịch sang LocalDate
- 29. Cách tạo chu kỳ xts thông thường từ các quan sát thời gian ngẫu nhiên?
- 30. Thời gian Joda: Chuyển đổi UTC thành địa phương
Đ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
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