2015-12-01 2 views
21

मैं जावा 8 में चेक करने की कोशिश कर रहा हूं यदि कोई तिथि 10 साल से अधिक पुरानी है और 20 से अधिक वर्ष है। मैं Date.before() और Date.after() और currentDate-10 वर्षों और currentDate-20 वर्षों के तर्कों के रूप में उपयोग कर रहा हूं।जांचें कि दिनांक 10 साल से बड़ा है और 20 से अधिक वर्षों

क्या कोई सुझाव दे सकता है कि दिनांक 0 साल के दिनांक और 20 साल पुराना दिनांक प्राप्त करने का सबसे साफ तरीका मेरे before() और after() विधियों में पास करने के लिए क्या होगा?

+0

मैं 100% इस बारे में निश्चित (/ के बाद से पहले की तारीख इस्तेमाल कभी नहीं) नहीं कर रहा हूँ, लेकिन आप आज के लिए initialised एक तारीख के साथ तुलना की कोशिश की है , फिर इसके संबंध में एक और दो तिथियां निर्धारित करें (10 साल और 20 साल पहले), फिर उन तरीकों का उपयोग करें? – Foleosy

+1

एक अच्छा पढ़ा है: http://www.oracle.com/technetwork/articles/java/jf14-date-time-2125367.html – Stultuske

+1

http://stackoverflow.com/questions/883060/how-can-i- निर्धारित करें-if-a-date-is-two-date-in-java – Stefan

उत्तर

11

Calendar का उपयोग करके आप आसानी से वर्तमान तिथि से 10 वर्ष की तारीख और 20 वर्ष पुरानी तारीख प्राप्त कर सकते हैं।

Calendar calendar = Calendar.getInstance(); 
calendar.add(Calendar.YEAR, -10); 
Date d1 = calendar.getTime(); 
calendar.add(Calendar.YEAR, -10); 
Date d2 = calendar.getTime(); 

आप जावा 8 का उपयोग कर रहे हैं तो आप भी LocalDate

LocalDate currentDate = LocalDate.now(); 
    Date d1 = Date.from(currentDate.minusYears(10).atStartOfDay(ZoneId.systemDefault()).toInstant()); 
    Date d2 = Date.from(currentDate.minusYears(20).atStartOfDay(ZoneId.systemDefault()).toInstant()); 

उपयोग कर सकते हैं आप date.after() और date.before() तरीकों का उपयोग कर सकते हैं जैसा कि आप ने कहा की तुलना के लिए।

if(date.after(d1) && date.before(d2)){ //date is the Date instance that wants to be compared 
     //// 
    } 

before() और after() तरीकों Calendar और LocalDate में भी लागू किया जाता है। आप java.util.Date उदाहरणों में परिवर्तित किए बिना उन तरीकों में उन तरीकों का उपयोग कर सकते हैं।

+8

हालांकि यह जावा 8 में काम करता है, मैं नई तारीख और समय एपीआई का उपयोग करने की सलाह दूंगा। – SpaceTrucker

+2

यदि आप लोकलडेट का उपयोग करते हैं, तो दिनांक पर वापस जाने की कोई आवश्यकता नहीं है ... – assylias

+1

मैंने सोचा कि ओपी 'दिनांक। बाद()' और 'तिथि। पहले()' विधियों –

28

आप ऐसा करने के लिए java.time.LocalDate का उपयोग कर सकते हैं। उदाहरण: यदि आप यदि 2005/01/01 उस अवधि के बीच है जांच करने की जरूरत है, तो आप उपयोग कर सकते हैं

LocalDate date = LocalDate.of(2005, 1, 1); // Assign date to check 
if(date.isBefore(today.minusYears(10)) && date.isAfter(today.minusYears(20))) 
    //Do Something 
+2

का उपयोग करना चाहता है मैंने स्वतंत्रता ली है उठाए गए मुद्दे @ स्पेसट्रुकर को हल करने के लिए एक अलग चर बनाना। यदि आप चाहें तो वापस रोल करने के लिए स्वतंत्र महसूस करें। साथ ही, ध्यान दें कि यह उत्तर * समय * और * समय क्षेत्र * के मुद्दों को अनदेखा करता है। मैं शायद पहले 'atStartOfDay' का उपयोग कर समय को छोटा कर दूंगा, और समय क्षेत्र हैंडलिंग विशिष्ट उपयोग मामले पर निर्भर करेगा। – jpmc26

4

एक और संभावना तिथि की जांच करने के लिए और ऊपरी तारीख के बीच साल गिनती प्राप्त करने के लिए है। यदि वर्ष की संख्या 0 से अधिक है और 10 से कम है, तो इसका मतलब है कि चेक करने की तारीख 10 साल से अधिक पुरानी है और 20 से अधिक वर्ष है।

इस कोड अंतराल ]now - 20 years ; now - 10 years[ में किसी भी तारीख का निर्धारण करेगा:

public static void main(String[] args) { 
    LocalDate dateToCheck = LocalDate.now().minusYears(20).plusDays(1); 

    LocalDate upperYear = LocalDate.now().minusYears(10); 
    long yearCount = ChronoUnit.YEARS.between(dateToCheck, upperYear); 
    if (yearCount > 0 && yearCount < 10) { 
     System.out.println("date is older than 10 years and newer than 20 years"); 
    } 
} 
+2

मैं केवल 'long l = LocalDate.now() का उपयोग करूंगा। (डेट टू चेक, क्रोनो यूनिट.वाययर); अगर (एल <=-10 && l> -20) 'यदि कार्य है "जांच करें कि उम्र उस अंतराल के भीतर है या नहीं।"लेकिन आपका उत्तर अभी भी एकमात्र ऐसा प्रश्न है जो प्रश्न की XY शैली से गुमराह नहीं है जो वास्तविक कार्य के बजाय 'पहले' और 'बाद' का उपयोग करने पर केंद्रित है। ध्यान दें कि 'x.until (y, वर्ष)' 'YEARS.between (x, y) 'के समान है लेकिन बाद वाले प्रतिनिधि पूर्व में हैं। – Holger

+1

@ होल्गर एक छोटा सा विवरण है, हालांकि, मुझे लगता है कि यह अब अंतराल की जांच करेगा - 20 साल; अब - 10 साल] '(ऊपरी हिस्से के लिए समावेशी बाध्य नोट करें)। लेकिन ओपी ने यह नहीं कहा कि सीमाओं को शामिल किया जाना चाहिए या नहीं। – Tunaki

+1

ठीक है, आप ऑपरेटर '>' या '> =' resp चुन सकते हैं। '<' या '<=' जैसा आप चाहें, लेकिन आपको मध्यवर्ती 'लोकलडेट' उदाहरणों की आवश्यकता नहीं है ... – Holger

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