java - कुछ तारीखों के बाद अगले सोमवार को पहले प्राप्त करें?




date calendar (5)

सिर्फ एक सुझाव - पाशन के बजाय, आप कैलेंडर.एड () जैसे स्विच स्टेटमेंट का उपयोग कर सकते हैं:

int weekdayNum = c.get(Calendar.DAY_OF_WEEK);

    switch (weekdayNum) {
    case 1: {
        c.add(Calendar.DAY_OF_MONTH, 1);
        break;
    }
    case 3: {
        c.add(Calendar.DAY_OF_MONTH, 6);
        break;
    }
    case 4: {
        c.add(Calendar.DAY_OF_MONTH, 5);
        break;
    }
    case 5: {
        c.add(Calendar.DAY_OF_MONTH, 4);
        break;
    }
    case 6: {
        c.add(Calendar.DAY_OF_MONTH, 3);
        break;
    }
    case 7: {
        c.add(Calendar.DAY_OF_MONTH, 2);
        break;
    }
    default:
        break;
    }

मुझे पता है कि यहां एक ही सवाल है , लेकिन मैंने इसका जवाब देने की कोशिश की है और उसने एक आउटपुट लौटाया जिसे मुझे समझ में नहीं आया। मैं जवाब से उलझन में हूँ और मुझे नहीं लगता कि आउटपुट सही है।

मुझे मदद की ज़रूरत है, धन्यवाद :)

GregorianCalendar date1 = new GregorianCalendar( 2014, 05, 12 ); //05 is june as month start from 0 -11

while( date1.get( Calendar.DAY_OF_WEEK ) != Calendar.MONDAY )
    date1.add( Calendar.DATE, 1 );  

System.out.println(date1);

यहां आउटपुट दिया गया है:

java.util.GregorianCalendar[time=1405267200000,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Singapore",offset=28800000,dstSavings=0,useDaylight=false,transitions=9,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2014,MONTH=6,WEEK_OF_YEAR=29,WEEK_OF_MONTH=3,DAY_OF_MONTH=14,DAY_OF_YEAR=195,DAY_OF_WEEK=2,DAY_OF_WEEK_IN_MONTH=2,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=0,ZONE_OFFSET=28800000,DST_OFFSET=0]

सोमवार की तारीख को पुनर्प्राप्त करने के लिए मुझे आउटपुट कहां से निकालना चाहिए?


tl; डॉ

LocalDate.of( 2014 , Month.JUNE , 12 )
         .with( TemporalAdjusters.next( DayOfWeek.MONDAY ) )

Java.time का उपयोग करना

आप परेशानी पुरानी डेट-टाइम क्लासेस का प्रयोग कर रहे हैं जो अब लीगेसी हैं, जो जावा टाइम टाइम क्लास द्वारा दी गई हैं।

LocalDate क्लास टाइम-ऑफ-दिवस के बिना और टाइम ज़ोन के बिना केवल-डेट मान का प्रतिनिधित्व करता है।

LocalDate ld = LocalDate.of( 2014 , Month.JUNE , 12 ) ;

निम्नलिखित सोमवार प्राप्त करने के लिए, TemporalAdjusters क्लास में पाया गया एक TemporalAdjuster कार्यान्वयन का उपयोग करें।

LocalDate nextMonday = ld.with( TemporalAdjusters.next( DayOfWeek.MONDAY ) ) ;

यदि आप मूल तारीख के साथ जाना चाहते हैं तो यह सोमवार ही है, तो nextOrSame उपयोग करें।

LocalDate nextOrSameMonday = ld.with( TemporalAdjusters.nextOrSame( DayOfWeek.MONDAY ) ) ;

जावा के बारे में। समय

Java.time फ्रेमवर्क जावा 8 और बाद में बनाया गया है। ये कक्षाएं परेशानी पुरानी विरासत तिथि-समय कक्षाएं जैसे कि java.util.Date , Calendar , और SimpleDateFormat

जोडा-टाइम प्रोजेक्ट, अब रखरखाव मोड में , जावा.टाइम क्लासेस के प्रवास को सलाह देता है।

अधिक जानने के लिए, ओरेकल ट्यूटोरियल देखें। और कई उदाहरणों और स्पष्टीकरण के लिए स्टैक अतिप्रवाह खोजें। विशिष्टता JSR 310 है

जावा को कब प्राप्त करें कक्षाएं?

तीन टन अतिरिक्त परियोजना java.time को अतिरिक्त कक्षाओं के साथ प्रदान करता है। यह प्रोजेक्ट जावा के संभावित भावी परिवर्धन के लिए एक सिद्ध मैदान है। आपको यहां कुछ उपयोगी वर्ग यहां मिल सकते हैं जैसे Interval , YearWeek , YearQuarter , और अधिक


इसके बजाय System.out.println(date1); System.out.println(date1.getTime()); उपयोग करें System.out.println(date1.getTime());

getTime Date का एक उदाहरण देता है जो Calendar की वर्तमान स्थिति को दर्शाता है

कौन सा उत्पादन होगा Mon Jul 14 00:00:00 EST 2014

System.out.println(date1) date1 System.out.println(date1.toString()) , System.out.println(date1.toString()) का उपयोग करने के बराबर है, जो इस मामले में, Calendar ऑब्जेक्ट की स्थिति के बारे में उपयोगी जानकारी का एक गुच्छा डंप कर रहा है, लेकिन वास्तव में नहीं मानव पठनीय डेटा

System.out.println(date1.getTime()) वर्तमान स्थानीय सेटिंग्स के आधार पर तिथि वैल्यू को स्वरूपित करने के लिए Date System.out.println(date1.getTime()) पद्धति का उपयोग करेगा, जो अधिक उपयोगी जानकारी प्रदान करेगा।

अपडेट किया गया

GregorianCalendar का उपयोग करने के बजाय, आपको सिस्टम Calendar उपयोग करना चाहिए, उदाहरण के लिए ...

Calendar date1 = Calendar.getInstance();
date1.set(2014, 06, 12);

इसके अलावा, महीने 0 इंडेक्स किए गए हैं, अर्थात् ज जनरी वास्तव में 0 नहीं 1 , इसलिए आपके उदाहरण में, आपने जुलाई को जुलाई के रूप में निर्दिष्ट नहीं किया है।

तो, बजाय, का उपयोग कर ...

Calendar date1 = Calendar.getInstance();
date1.set(2014, 05, 12);

while (date1.get(Calendar.DAY_OF_WEEK) != Calendar.MONDAY) {
    date1.add(Calendar.DATE, 1);
}

System.out.println(date1.getTime());

कौन सा outputted ...

Mon Jun 16 16:22:26 EST 2014

जो आज से अगले सोमवार है ... अधिक या कम;)


या बस कुछ साधारण गणित करते हैं Calender.Monday बाद से। Calender.Monday 2 बराबर है, वर्तमान दिनों में जोड़े जाने वाले दिनों की संख्या की गणना करना आसान है।

Calendar date1 = Calendar.getInstance();
date1.set(2014, 05, 12);
int dayOfWeek = date1.get(Calendar.DAY_OF_WEEK);
date1.add(Calendar.DATE, (9 - dayOfWeek) % 7);

निम्नलिखित कोड से तुलना करें:

    String pingResult = "asd";
    long s = System.nanoTime ( );
    if ( null != pingResult )
    {
        System.out.println ( "null != pingResult" );
    }
    long e = System.nanoTime ( );
    System.out.println ( e - s );

    long s1 = System.nanoTime ( );
    if ( pingResult != null )
    {
        System.out.println ( "pingResult != null" );
    }
    long e1 = System.nanoTime ( );
    System.out.println ( e1 - s1 );

आउटपुट (एकाधिक निष्पादन के बाद):

null != pingResult
325737
pingResult != null
47027

इसलिए, pingResult != null विजेता है।





java date calendar