2013-02-18 11 views
5

में डेटटाइम के तुरंत सेकंड और मिलीसेकंड तत्काल की तारीखों की तुलना करना, मान लीजिए कि मेरे पास निम्न की तरह दो तिथियां हैं।जोडा

DateTimeFormatter formatter = DateTimeFormat.forPattern("dd-MMM-yyyy HH:mm:ss").withZone(DateTimeZone.forID("Asia/Kolkata")); 
DateTime firstDate = formatter.parseDateTime("16-Feb-2012 12:03:45"); 
DateTime secondDate = formatter.parseDateTime("17-Feb-2013 12:03:45"); 

मैं देखना इन दो तिथियों की तुलना करना चाहते हैं कि क्या firstDate, उतनी ही जल्दी है बाद में या secondDate के बराबर।

मैं निम्नलिखित का प्रयास कर सकता हूं।

System.out.println("firstDate = "+firstDate+"\nsecondDate = "+secondDate+"\ncomparison = "+firstDate.isBefore(secondDate)); 
System.out.println("firstDate = "+firstDate+"\nsecondDate = "+secondDate+"\ncomparison = "+firstDate.isAfter(secondDate)); 
System.out.println("firstDate = "+firstDate+"\nsecondDate = "+secondDate+"\ncomparison = "+firstDate.equals(secondDate)); 

इस कोड द्वारा उत्पादित किया गया है जो मैं चाहता हूं।

यह निम्न आउटपुट उत्पन्न करता है।

firstDate = 2012-02-16T12:03:45.000+05:30 
secondDate = 2013-02-17T12:03:45.000+05:30 
comparison = true 

firstDate = 2012-02-16T12:03:45.000+05:30 
secondDate = 2013-02-17T12:03:45.000+05:30 
comparison = false 

firstDate = 2012-02-16T12:03:45.000+05:30 
secondDate = 2013-02-17T12:03:45.000+05:30 
comparison = false 

मैं सेकंड और इन तिथियों के मिलीसेकेंड भाग की अनदेखी करने की जरूरत है। मैंने withSecondOfMinute(0) और withMillis(0) विधियों का उपयोग निम्न विधियों का उपयोग करने का प्रयास किया है।

DateTimeFormatter formatter = DateTimeFormat.forPattern("dd-MMM-yyyy HH:mm:ss").withZone(DateTimeZone.forID("Asia/Kolkata")); 
DateTime firstDate = formatter.parseDateTime("16-Feb-2012 12:03:45").withSecondOfMinute(0).withMillis(0); 
DateTime secondDate = formatter.parseDateTime("17-Feb-2013 12:03:45").withSecondOfMinute(0).withMillis(0);   

लेकिन यह निम्न उत्पादन सामने आए।

firstDate = 1970-01-01T05:30:00.000+05:30 
secondDate = 1970-01-01T05:30:00.000+05:30 
comparison = false 

firstDate = 1970-01-01T05:30:00.000+05:30 
secondDate = 1970-01-01T05:30:00.000+05:30 
comparison = false 

firstDate = 1970-01-01T05:30:00.000+05:30 
secondDate = 1970-01-01T05:30:00.000+05:30 
comparison = true 

withSecondOfMinute() विधि के दस्तावेज़ बताते हैं।

इस डेटाटाइम की दूसरी प्रति मिनट फ़ील्ड अद्यतन के साथ एक प्रतिलिपि देता है। डेटटाइम अपरिवर्तनीय है, इसलिए कोई सेट विधि नहीं है। इसके बजाए, यह विधि दूसरे मिनट के मूल्य के साथ एक नया उदाहरण देता है।

और विधि withMillis() विधि के दस्तावेज़ कहते हैं।

विभिन्न मिलिस के साथ इस डेटाटाइम की प्रतिलिपि देता है। लौटा ऑब्जेक्ट या तो एक नया उदाहरण या यह होगा। केवल मिलिस परिवर्तन, कालक्रम और समय क्षेत्र रखा जाएगा।

समय भाग को अनदेखा करके तिथियों की तुलना पूरी तरह से DateTimeComparator.getDateOnlyInstance() का उपयोग करके आसानी से किया जा सकता है।

if(DateTimeComparator.getDateOnlyInstance().compare(firstDate, secondDate)==0){} 
if(DateTimeComparator.getDateOnlyInstance().compare(firstDate, secondDate)<0){} 
if(DateTimeComparator.getDateOnlyInstance().compare(firstDate, secondDate)>0){} 

कैसे (इस मामले में सेकंड और मिलीसेकंड) DateTime में विशिष्ट तत्काल अनदेखी दो तिथियों तुलना करने के लिए?

उत्तर

6

मुझे लगता है कि आप DateTime#withMillis() के बजाय DateTime#withMillisOfSecond() उपयोग करना चाहते हैं:

DateTimeFormatter formatter = DateTimeFormat.forPattern("dd-MMM-yyyy HH:mm:ss").withZone(DateTimeZone.forID("Asia/Kolkata")); 
DateTime firstDate = formatter.parseDateTime("16-Feb-2012 12:03:45").withSecondOfMinute(0).withMillisOfSecond(0); 
DateTime secondDate = formatter.parseDateTime("17-Feb-2013 12:03:45").withSecondOfMinute(0).withMillisOfSecond(0); 

0 को DateTime#withMillis() स्थापना, 1/1/1970 करने के लिए दोनों अपनी तिथियाँ रीसेट कर देगा, और इसलिए आप उन पर equals कॉल के लिए true मिलता है।

इसी प्रकार, DateTime#withMillisOfDay() से 0 पर सेट करने से, समय midnight पर सेट हो जाएगा।

DateTimeComparator comparator = DateTimeComparator.getInstance(
     DateTimeFieldType.minuteOfHour()); 

जो वस्तुओं के दूसरे और मिलीसेकंड भागों की उपेक्षा होगी तुलना की जा रही:

+0

बहुत बहुत धन्यवाद। किया हुआ! – Tiny

+0

@Tiny। आपका स्वागत है :) –

8

एक और दृष्टिकोण निचली सीमा के रूप में मिनट के साथ एक DateTimeComparator तैयार करना है।

+0

मैं बाद में इस दृष्टिकोण को आजमाउंगा। धन्यवाद। – Tiny

0
public static String getFromatDateTime(Date date) { 
    SimpleDateFormat sdfDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S"); 
    final GregorianCalendar gc = new GregorianCalendar(); 
    gc.setTime(date); 
    //gc.set(Calendar.HOUR_OF_DAY, 0); 
    //gc.set(Calendar.MINUTE, 0); 
    //block ignore second and millisecond 
    gc.set(Calendar.SECOND, 0); 
    gc.set(Calendar.MILLISECOND, 0); 
    String strDate = sdfDate.format(gc.getTime()); 
    return strDate; 
} 
public static void main(String[] args) throws ParseException { 
    SimpleDateFormat sdfDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S"); 
    Date now = new Date(); 
    String currentDate = Testing.getFromatDateTime(now); 
    String fullDate = "2015-12-07 14:53:39.30"; 
    String effDateStr = Testing.getFromatDateTime(sdfDate.parse(fullDate)); 

    System.out.println("Currennt Date: " + currentDate); 
    System.out.println("Effective Date: " + effDateStr); 
    System.out.println(currentDate.compareTo(effDateStr)==0); 
} 
संबंधित मुद्दे