दिलचस्प पोस्ट
दृश्य सी ++ पर NOMINMAX के साथ संभव समस्याएं अपने अनुप्रयोग से संबंधित डेटा के साथ सदस्यता एपीआई का उपयोग कैसे करें? क्यों कुछ DOCTYPE घोषणाओं का कारण 100% हेइट टेबल और divs काम करना बंद करने के लिए? सीएसएस में एक <img> s src विशेषता को परिभाषित करें fcntl, lockf, जो फ़ाइल लॉकिंग के लिए बेहतर है? टोमैक एक्लिप्स में शुरू हुआ लेकिन http: // localhost: 8085 / स्प्रिंग वेबसकेट @ सेंडटोसेशन: विशिष्ट सत्र को संदेश भेजें पायथन में stderr को कैसे मुद्रित करना है? "बिग ओ" संकेतन के एक सादे अंग्रेजी व्याख्या क्या है? जावास्क्रिप्ट फ़ंक्शन कॉल को कोष्ठक करने के लिए उपयोग क्यों किया जाता है? PHP के साथ एक एन्क्रिप्टेड ज़िप संग्रह बनाएँ पाठ बॉक्स इनपुट प्रतिबंधों को परिभाषित करने के लिए कैसे? रेल कई कई स्वयं शामिल होने के लिए प्रारूप में समय कैसे प्रिंट करें: 2009-08-10 18: 17: 54.811 लैम्ब्डा भावों की समानता का परीक्षण करने का सबसे कारगर तरीका

यादृच्छिक जन्मतिथि उत्पन्न करें

जावा प्रोग्राम का उपयोग करते हुए मैं अपने डेटाबेस में लोगों के लिए जन्म की यादृच्छिक तिथि उत्पन्न करने का प्रयास कर रहा हूं। यह मैं कैसे करूंगा?

Solutions Collecting From Web of "यादृच्छिक जन्मतिथि उत्पन्न करें"

import java.util.GregorianCalendar; public class RandomDateOfBirth { public static void main(String[] args) { GregorianCalendar gc = new GregorianCalendar(); int year = randBetween(1900, 2010); gc.set(gc.YEAR, year); int dayOfYear = randBetween(1, gc.getActualMaximum(gc.DAY_OF_YEAR)); gc.set(gc.DAY_OF_YEAR, dayOfYear); System.out.println(gc.get(gc.YEAR) + "-" + (gc.get(gc.MONTH) + 1) + "-" + gc.get(gc.DAY_OF_MONTH)); } public static int randBetween(int start, int end) { return start + (int)Math.round(Math.random() * (end - start)); } } 

java.util.Date पास एक निर्माता है जो युग के बाद से मिलीसेकंड को स्वीकार करता है, और java.util.Random में एक विधि है जो आपको यादृच्छिक संख्या मिलीसेकेंड दे सकती है। आप चाहते हैं कि DOBs की सीमा के आधार पर आप यादृच्छिक मूल्य के लिए एक सीमा निर्धारित करना चाहते हैं, लेकिन उनको ऐसा करना चाहिए।

बहुत मोटे तौर पर:

 Random rnd; Date dt; long ms; // Get a new random instance, seeded from the clock rnd = new Random(); // Get an Epoch value roughly between 1940 and 2010 // -946771200000L = January 1, 1940 // Add up to 70 years to it (using modulus on the next long) ms = -946771200000L + (Math.abs(rnd.nextLong()) % (70L * 365 * 24 * 60 * 60 * 1000)); // Construct a date dt = new Date(ms); 

आपको यादृच्छिक तारीख को परिभाषित करने की आवश्यकता है, है ना?

ऐसा करने का एक आसान तरीका एक long ( 1 जनवरी, 1 9 70 से मिलीसेकेंड में समय) का उपयोग करके एक नई Date ऑब्जेक्ट उत्पन्न करना है और यादृच्छिक long घटाना:

 new Date(Math.abs(System.currentTimeMillis() - RandomUtils.nextLong())); 

( RandomUtils अपाचे कॉमन्स लैंग से लिया गया है)

बेशक, यह एक वास्तविक यादृच्छिक तिथि (उदाहरण के लिए आपको 1 9 70 से पहले की तारीख नहीं मिलेगी) हो सकती है, लेकिन मुझे लगता है कि यह आपकी आवश्यकताओं के लिए पर्याप्त होगा

अन्यथा, आप Calendar वर्ग का उपयोग करके अपनी खुद की तिथि बना सकते हैं:

 int year = // generate a year between 1900 and 2010; int dayOfYear = // generate a number between 1 and 365 (or 366 if you need to handle leap year); Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.YEAR, randomYear); calendar.set(Calendar.DAY_OF_YEAR, dayOfYear); Date randomDoB = calendar.getTime(); 

जावा 8 आधारित हल के लिए स्निपेट:

 Random random = new Random(); int minDay = (int) LocalDate.of(1900, 1, 1).toEpochDay(); int maxDay = (int) LocalDate.of(2015, 1, 1).toEpochDay(); long randomDay = minDay + random.nextInt(maxDay - minDay); LocalDate randomBirthDate = LocalDate.ofEpochDay(randomDay); System.out.println(randomBirthDate); 

नोट : यह 1 जनवरी 1 9 00 (समावेशी) और 1 जनवरी 2015 (अनन्य) के बीच एक यादृच्छिक दिनांक उत्पन्न करता है।

नोट : यह युग दिवस पर आधारित है, यानी 1 जनवरी 1 9 70 (ईपीओसीएच) के सापेक्ष – ईपीओसी के बाद सकारात्मक अर्थ, ईपीओसीए के पहले नकारात्मक अर्थ


आप एक छोटी उपयोगिता वर्ग भी बना सकते हैं:

 public class RandomDate { private final LocalDate minDate; private final LocalDate maxDate; private final Random random; public RandomDate(LocalDate minDate, LocalDate maxDate) { this.minDate = minDate; this.maxDate = maxDate; this.random = new Random(); } public LocalDate nextDate() { int minDay = (int) minDate.toEpochDay(); int maxDay = (int) maxDate.toEpochDay(); long randomDay = minDay + random.nextInt(maxDay - minDay); return LocalDate.ofEpochDay(randomDay); } @Override public String toString() { return "RandomDate{" + "maxDate=" + maxDate + ", minDate=" + minDate + '}'; } } 

और इसे इस तरह प्रयोग करें:

 RandomDate rd = new RandomDate(LocalDate.of(1900, 1, 1), LocalDate.of(2010, 1, 1)); System.out.println(rd.nextDate()); System.out.println(rd.nextDate()); // birthdays ad infinitum 

जन्मों की यादृच्छिक तिथि उत्पन्न करना:

 import java.util.Calendar; public class Main { public static void main(String[] args) { for (int i = 0; i < 100; i++) { System.out.println(randomDOB()); } } public static String randomDOB() { int yyyy = random(1900, 2013); int mm = random(1, 12); int dd = 0; // will set it later depending on year and month switch(mm) { case 2: if (isLeapYear(yyyy)) { dd = random(1, 29); } else { dd = random(1, 28); } break; case 1: case 3: case 5: case 7: case 8: case 10: case 12: dd = random(1, 31); break; default: dd = random(1, 30); break; } String year = Integer.toString(yyyy); String month = Integer.toString(mm); String day = Integer.toString(dd); if (mm < 10) { month = "0" + mm; } if (dd < 10) { day = "0" + dd; } return day + '/' + month + '/' + year; } public static int random(int lowerBound, int upperBound) { return (lowerBound + (int) Math.round(Math.random() * (upperBound - lowerBound))); } public static boolean isLeapYear(int year) { Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.YEAR, year); int noOfDays = calendar.getActualMaximum(Calendar.DAY_OF_YEAR); if (noOfDays > 365) { return true; } return false; } } 

यादृच्छिक डेटा जनरेशन के लिए आप चेकआऊट रैंडाइज़र कर सकते हैं.यह लाइब्रेरी दी गई मॉडल श्रेणी से यादृच्छिक डेटा बनाने में मदद करता है.उदाहरण कोड नीचे जांचें।

 public class Person { @DateValue( from = "01 Jan 1990",to = "31 Dec 2002" , customFormat = "dd MMM yyyy") String dateOfBirth; } //Generate random 100 Person(Model Class) object Generator<Person> generator = new Generator<>(Person.class); List<Person> persons = generator.generate(100); 

चूंकि एनोटेशन के जरिए कई डेटा जनरेटर बनाया जा सकता है, आप कस्टम डेटा जनरेटर भी बना सकते हैं। मैं आपको लाइब्रेरी पेज पर दिए गए दस्तावेज के माध्यम से जाने का सुझाव देता हूं।

इस विधि को देखें:

 public static Date dateRandom(int initialYear, int lastYear) { if (initialYear > lastYear) { int year = lastYear; lastYear = initialYear; initialYear = year; } Calendar cInitialYear = Calendar.getInstance(); cInitialYear.set(Calendar.YEAR, 2015); long offset = cInitialYear.getTimeInMillis(); Calendar cLastYear = Calendar.getInstance(); cLastYear.set(Calendar.YEAR, 2016); long end = cLastYear.getTimeInMillis(); long diff = end - offset + 1; Timestamp timestamp = new Timestamp(offset + (long) (Math.random() * diff)); return new Date(timestamp.getTime()); } 

यदि आप अपने कोड में एक नई लाइब्रेरी जोड़ने में कोई दिक्कत नहीं करते हैं तो आप मोकनैट (अस्वीकरण: मैं लेखकों में से एक है) का उपयोग कर सकते हैं।

 MockNeat mock = MockNeat.threadLocal(); // Generates a random date between [1970-1-1, NOW) LocalDate localDate = mock.localDates().val(); System.out.println(localDate); // Generates a random date in the past // but beore 1987-1-30 LocalDate min = LocalDate.of(1987, 1, 30); LocalDate past = mock.localDates().past(min).val(); System.out.println(past); LocalDate max = LocalDate.of(2020, 1, 1); LocalDate future = mock.localDates().future(max).val(); System.out.println(future); // Generates a random date between 1989-1-1 and 1993-1-1 LocalDate start = LocalDate.of(1989, 1, 1); LocalDate stop = LocalDate.of(1993, 1, 1); LocalDate between = mock.localDates().between(start, stop).val(); System.out.println(between); 

Java8 के लिए -> जन्म के आंकड़ों को पूरा करने से वर्तमान दिन पहले होना चाहिए:

 import java.time.LocalDate; import java.time.LocalTime; import java.time.Period; import java.time.temporal.ChronoUnit; import java.util.Random; public class RandomDate { public static LocalDate randomBirthday() { return LocalDate.now().minus(Period.ofDays((new Random().nextInt(365 * 70)))); } public static void main(String[] args) { System.out.println("randomDate: " + randomBirthday()); } } 

मुझे लगता है कि यह चाल करेगा:

 public static void main(String[] args) { Date now = new Date(); long sixMonthsAgo = (now.getTime() - 15552000000l); long today = now.getTime(); for(int i=0; i<10; i++) { long ms = ThreadLocalRandom.current().nextLong(sixMonthsAgo, today); Date date = new Date(ms); System.out.println(date.toString()); } } 

यदि आप किसी तृतीय पक्ष लाइब्रेरी को ध्यान नहीं देते हैं, तो Utils पुस्तकालय में एक यादृच्छिक जावा। ऊतक उत्पन्न करता है और जावा 8 की तारीख और समय एपीआई से सभी तिथियां, समय, इंस्टेंट्स और डरनेस उत्पन्न होती हैं।

 LocalDate birthDate = RandomDateUtils.randomPastLocalDate(); LocalDate today = LocalDate.now(); LocalDate under18YearsOld = RandomDateUtils.randomLocalDate(today.minus(18, YEARS), today); LocalDate over18YearsOld = RandomDateUtils.randomLocalDateBefore(today.minus(18, YEARS)); 

यह मेवेन सेंट्रल रिपॉजिटरी में है:

 <dependency> <groupId>com.github.rkumsher</groupId> <artifactId>utils</artifactId> <version>1.0</version> </dependency> 

मैं स्काला का अध्ययन कर रहा हूं और सीमा के बीच एक यादृच्छिक तारीख को चुनने के लिए Googling जावा समाधान समाप्त कर रहा हूं। मैं इस पोस्ट को सुपर सहायक पाया और यह मेरा अंतिम समाधान है आशा है कि यह भविष्य स्काला और जावा प्रोग्रामर को सहायता कर सकता है।

 import java.sql.Timestamp def date_rand(ts_start_str:String = "2012-01-01 00:00:00", ts_end_str:String = "2015-01-01 00:00:00"): String = { val ts_start = Timestamp.valueOf(ts_start_str).getTime() val ts_end = Timestamp.valueOf(ts_end_str).getTime() val diff = ts_end - ts_start println(diff) val ts_rand = new Timestamp(ts_start + (Random.nextFloat() * diff).toLong) return ts_rand.toString } //> date_rand: (ts_start_str: String, ts_end_str: String)String println(date_rand()) //> 94694400000 //| 2012-10-28 18:21:13.216 println(date_rand("2001-01-01 00:00:00", "2001-01-01 00:00:00")) //> 0 //| 2001-01-01 00:00:00.0 println(date_rand("2001-01-01 00:00:00", "2010-01-01 00:00:00")) //> 283996800000 //| 2008-02-16 23:15:48.864 //> 2013-12-21 08:32:16.384 

आपको तिथि में डीडी / एमएम / याय मिलेगा
आप मठ.रैन्डम () फ़ंक्शन का उपयोग कर सकते हैं जैसे मैंने नीचे किया है

यहां हम 3 यादृच्छिक संख्या 1 से 31,1 से 12, 1 9 0 9 से 2016 तक पैदा कर रहे हैं और दोनों के बीच में "/" सम्मिलित कर रहे हैं

 public static String getRandomJoinDate() { String date=""; int yearBegin=1990; int yearEnd=2016-yearBegin; date=""+(1 + (int)(Math.random() * 31)+"/"+(1 + (int)(Math.random() * 12)+"/"+(yearBegin + (int)(Math.random() * yearEnd)))); return date; } 

नीचे Math.random () लिंक के बारे में अधिक जानने के लिए मदद मिल सकती है
Math.random () समझाया