2013-02-08 22 views
8

जोडाटाइम का उपयोग करके एक यादृच्छिक डेटाटाइम उत्पन्न करना संभव है जैसे डेटाटाइम में प्रारूप yyyy-MM-dd एचएच: एमएम: एसएस और यह दो यादृच्छिक डेटाटाइम उत्पन्न करने में सक्षम होना चाहिए जहां दिनांक 2 शून्य तिथि 1 2 मिनट से अधिक हो लेकिन 60 मिनट से कम हो। कृपया कुछ विधि सुझाएं।जावा (जोडा समय) में यादृच्छिक दिनांक समय उत्पन्न करना

उत्तर

10

यह आपके द्वारा पूछे जाने वाले कड़ाई से पालन करता है (सही प्रारूप को छोड़कर)।

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

आप इस चलाते हैं, तो ध्यान दें जाएगा कि आप साल के लिए अपमानजनक मान मिल जाएगा, लेकिन वह बस दिनांक समय की पूरी संभव सीमा पर एक यादृच्छिक दिनांक समय पैदा करने का परिणाम (या उस बात के लिए तिथि) है । लेकिन एक निश्चित सीमा तक अंत समय को सीमित करने की एक ही तकनीक को यदि आप चाहें तो प्रारंभ समय पर लागू किया जा सकता है।

11

सरल

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

यह 1 9 70-01-01 डुनो की तारीखों के साथ केवल एक यादृच्छिक संख्या उत्पन्न करता है। – chettyharish

+1

मुझे लगता है कि आखिरी पंक्ति 'टिमस्टैम्प रैंड = नई टाइमस्टैम्प (रेंजबेजिन + (लंबी) (Math.random() * diff) होना चाहिए; '' – saschoar

1

तथ्य यह है कि किसी भी तारीख एक लंबे संख्या से दर्शाया जा सकता है, दिनांक वर्ग, http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Date.html#Date(long) की इस पद्धति पर एक बार देख ले, आप एक अधिकतम तिथि 1 परिभाषित कर सकते हैं के आधार पर, आज मान लीजिए , और जोड़ने के लिए मिनटों की संख्या यादृच्छिक।

दूसरे शब्दों में:

  • चरण 1 - एक लंबे संख्या randomize या तिथि 1 के लिए एक संख्या निर्धारित
  • चरण 2 - जोड़ने के लिए मिनट randomize, 58 मिनट (58 x 60 से यादृच्छिक गुणा x 1000) और तिथि 1 में जोड़ने के लिए, प्लस 2 मिनट (2x 60 x 1000)
1

कोशिश

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

आप Math.random() का उपयोग करके यादृच्छिक संख्या उत्पन्न कर सकते हैं; आप इस मान का उपयोग कर सकते हैं

संबंधित मुद्दे