एक आसान तरीका यह है कि न्यूनतम और अधिकतम तिथि को उनके संबंधित युग के दिन में परिवर्तित किया जाए, उन दो मानों के बीच एक यादृच्छिक पूर्णांक उत्पन्न किया जाए और अंत में इसे वापस LocalDate
में परिवर्तित किया जाए। . युग का दिन <के साथ प्राप्त किया जाता है code>toEpochDay ()
जो 1970-01-01 (आईएसओ) के बाद के दिनों की गिनती है।
एक यादृच्छिक वर्ष, फिर महीने और फिर दिन उत्पन्न करने में समस्या यह है कि आपके पास एक अमान्य तिथि (जैसे 31 फरवरी) के साथ गिरने का एक छोटा सा मौका है। साथ ही, एक यादृच्छिक युग दिवस लेना सभी संभावित तिथियों में एक समान वितरण की गारंटी देता है।
public static void main(String... args) {
long minDay = LocalDate.of(1970, 1, 1).toEpochDay();
long maxDay = LocalDate.of(2015, 12, 31).toEpochDay();
long randomDay = ThreadLocalRandom.current().nextLong(minDay, maxDay);
LocalDate randomDate = LocalDate.ofEpochDay(randomDay);
System.out.println(randomDate);
}
ध्यान दें कि चूंकि न्यूनतम तिथि वास्तव में सबसे पहले है, आप इसे 0 से बदल सकते हैं।
इसे LocalDate
में बदलने के लिए एक java.sql.Date
. में , आप इस पोस्ट
का संदर्भ ले सकते हैं :
java.sql.Date date = java.sql.Date.valueOf(randomDate);