2012-12-07 20 views
25

का उपयोग करके दो तिथियों की तुलना करना मैं दो तिथियों की तुलना करना चाहता हूं, हालांकि मैं परेशानी में भाग रहा हूं। 1 दिनांक java.util.date ऑब्जेक्ट से बनाया गया है और दूसरा मैन्युअल रूप से तैयार किया गया है।जोडा समय

Date ds = new Date(); 
DateTime d = new DateTime(ds); 

DateTime e = new DateTime(2012,12,07, 0, 0); 
System.out.println(d.isEqual(e)); 

हालांकि परीक्षण false पता चला: निम्नलिखित कोड एक उदाहरण है। मुझे लगता है कि यह उस समय के कारण है। मैं कैसे जांच सकता हूं कि ये दो तिथियां एक-दूसरे के बराबर हैं (मेरा मतलब है कि वर्ष, महीना, तिथि समान है)?

+0

देख FYI करें, [Joda समय] (http://www.joda.org/joda-time/) परियोजना अब [रखरखाव मोड] में है (https://en.wikipedia.org/wiki/Maintenance_mode), टीम [java.time] (http) पर माइग्रेशन की सलाह देने वाली टीम के साथ : //docs.oracle.com/javase/9/docs/api/java/time/package-summary.html) कक्षाएं। देखें [ओरेकल द्वारा ट्यूटोरियल] (https://docs.oracle.com/javase/tutorial/datetime/TOC.html)। –

उत्तर

44
System.out.println(d.toDateMidnight().isEqual(e.toDateMidnight())); 

या

System.out.println(d.withTimeAtStartOfDay().isEqual(e.withTimeAtStartOfDay())); 
+5

toDateMidnight() को बहिष्कृत किया गया है और इसका उपयोग नहीं किया जाना चाहिए।इसके बजाए ,TimeAtStartOfDay() का उपयोग किया जा सकता है, लेकिन यह अभी भी इष्टतम नहीं है क्योंकि यह टाइमज़ोन को नहीं हटाता है, इसलिए यदि दोनों तिथियों में अलग-अलग टाइमज़ोन हैं, तो वे कभी बराबर नहीं होंगे। – Stan

+3

मैं 'toLocalDate()' का उपयोग करता हूं, जो मुझे लगता है कि एक ही समस्या है। इससे बचने के लिए मुझे लगता है कि आप 'ज़ोनोन()', जैसे: 'd.toLocalDate()। IsEqual (e.withZone (d.zone) .toLocalDate())' चेन 'कर सकते हैं। ध्यान दें कि यह _not_ परीक्षण है। –

+1

यह काम नहीं करेगा अगर डी और ई अलग-अलग समय क्षेत्र हैं। चार्ल्स वुड का उत्तर अधिक विश्वसनीय –

1

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

d = d.withTime(0, 0, 0, 0); 
-5

लिखें अपनी खुद की विधि

public boolean checkEqual(DateTime first,DateTime second){ 
    if(first.<getterforyear> == second.<getterforyear> && first.<getterformonth> == second.<getterformonth> && first.<getterforday> == second.<getterforday>){ 
     return true; 
    } 
return false; 
} 
+0

प्रकार समान हैं, प्रश्न को ध्यान से पढ़ें। दोनों दिनांक समय हैं। –

+2

यह पूरी तरह से अनावश्यक है क्योंकि जोडा टाइम में कई उपयोगिता विधियां हैं जो वास्तव में इस तरह की चीज करती हैं। –

3

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

Date ds = new Date(); 
DateMidnight d = new DateMidnight(ds); 

DateMidnight e = new DateMidnight(2012, 12, 7); 
System.out.println(d.isEqual(e)); 

लेकिन सावधान रहना, यह प्रिंट होगा "सही" केवल आज :)

भी ध्यान रखें कि द्वारा डिफ़ॉल्ट JDK का दिनांक और सभी Joda समय तत्काल वर्गों (DATETIME और डेट मिडनाइट शामिल) डिफ़ॉल्ट टाइमज़ोन का उपयोग करके बनाए जाते हैं। इसलिए यदि आप कोड में तुलना करने के लिए एक तिथि बनाते हैं, लेकिन डीबी से दूसरे को पुनर्प्राप्त करते हैं जो संभवतः यूटीसी में तारीखों को संग्रहीत करता है तो आपको लगता है कि आप यूटीसी समय क्षेत्र में नहीं हैं, यह असंगतताओं का सामना कर सकते हैं।

date1.toLocalDate().isEqual(date2.toLocalDate()) 

इस दिनांक समय के समय भाग से छुटकारा मिल जाएगा:

+0

पैकेज समय में दिनांक मध्यरात्रि को बहिष्कृत किया गया है स्थानीय दिनांक –

+0

का उपयोग करना है मध्यरात्रि से संबंधित वर्गों और विधियों और विधियों को हटा दिया गया है, "दिन के पहले पल" अवधारणा और विधियों द्वारा आपूर्ति की जाती है। –

15

आप toLocalDate() उपयोग करना चाहिए।

एक और दृष्टिकोण है, लेकिन यह इस मामले में जहां दो तिथियों के एक अलग समय क्षेत्र है के लिए खाते में नहीं है, तो यह कम विश्वसनीय है:

date1.withTimeAtStartOfDay().isEqual(date2.withTimeAtStartOfDay()) 
0

यह एक है स्थैतिक विधि जो मेरे लिए काम करती है।

public static boolean isSameDay(DateTime date1, DateTime date2){ 
    return date1.withTimeAtStartOfDay().isEqual(date2.withTimeAtStartOfDay()); 
} 
+0

मुझे 'toLocalDate' का उपयोग करके [मौजूदा उत्तर] (https://stackoverflow.com/a/21553438/642706) का लाभ दिखाई नहीं देता है। इसके अलावा यदि कोई 'डेटटाइम' ऑब्जेक्ट्स के पास अलग-अलग समय क्षेत्र होते हैं, तो अन्य उत्तर का दृष्टिकोण नहीं होगा। चाहे यह अच्छा या बुरा हो, व्यापार की समस्या पर निर्भर करता है। –

-1
DateTimeComparator.getDateOnlyInstance().compare(obj1, obj2); 

obj1 और obj2 हो सकता है एक स्ट्रिंग, लांग, तारीख (java.util) ... जानकारी के लिए http://www.joda.org/joda-time/apidocs/index.html?org/joda/time/DateTimeComparator.html

+1

स्टैक ओवरफ़्लो में आपका स्वागत है! किसी प्रश्न का उत्तर देने से पहले, हमेशा मौजूदा उत्तरों को पढ़ें। यह उत्तर पहले ही प्रदान किया जा चुका है। उत्तर दोहराने के बजाय, मौजूदा उत्तर को वोट दें। अच्छे उत्तरों को लिखने के लिए कुछ दिशानिर्देश यहां पाए जा सकते हैं [यहां] (https://stackoverflow.com/help/how-to-answer)। – dferenc

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