java - महीने की गणना के अंतिम दिन




datetime netbeans (6)

java.time

जावा 8 में निर्मित java.time लाइब्रेरी का उपयोग करके, आप TemporalAdjuster java.time क्लास (या TemporalAdjuster java.time यूटिलिटी क्लास ) का उपयोग कर सकते हैं।

import java.time.LocalDate;
import java.time.temporal.TemporalAdjusters;

LocalDate now = LocalDate.now(); //2015-11-23
LocalDate lastDay = now.with(TemporalAdjusters.lastDayOfMonth()); //2015-11-30

यदि आपको समय की जानकारी जोड़ने की ज़रूरत है, तो आप किसी स्थानीय उपलब्धडेट को स्थानीयडेटाइम रूपांतरण जैसे उपयोग कर सकते हैं

lastDay.atStartOfDay(); //2015-11-30T00:00

मुझे गणना के साथ समस्याएं हैं कि महीने का अगला अंतिम दिन एक अधिसूचना के लिए है जो भेजा जाना निर्धारित है।

मेरा कोड यहाँ है:

RecurrenceFrequency recurrenceFrequency = notification.getRecurrenceFrequency();
Calendar nextNotifTime = Calendar.getInstance();

यह वह लाइन है जिसके कारण मुझे विश्वास है:

nextNotifTime.add(recurrenceFrequency.getRecurrencePeriod(), 
                  recurrenceFrequency.getRecurrenceOffset());

अधिसूचना के लिए अगले महीने के अंतिम दिन को सही तरीके से सेट करने के लिए मैं कैलेंडर का उपयोग कैसे कर सकता हूं?


आप कैलेंडर को अगले महीने के पहले सेट कर सकते हैं और फिर एक दिन घटा सकते हैं।

Calendar nextNotifTime = Calendar.getInstance();
nextNotifTime.add(Calendar.MONTH, 1);
nextNotifTime.set(Calendar.DATE, 1);
nextNotifTime.add(Calendar.DATE, -1);

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


कैलेंडर ऑब्जेक्ट के getActualMaximum(int field) विधि को देखें।

यदि आप अपनी कैलेंडर ऑब्जेक्ट को उस महीने में सेट करते हैं जिसके लिए आप अंतिम तिथि चाहते हैं, तो getActualMaximum(Calendar.DAY_OF_MONTH) आपको अंतिम दिन देगा।


निम्नलिखित हमेशा उचित परिणाम देंगे:

    Calendar cal = Calendar.getInstance();
    cal.set(Calendar.MONTH, ANY_MONTH);
    cal.set(Calendar.YEAR, ANY_YEAR);
    cal.set(Calendar.DAY_OF_MONTH, 1);// This is necessary to get proper results
    cal.set(Calendar.DATE, cal.getActualMaximum(Calendar.DATE));
    cal.getTime();

        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
        Date date = sdf.parse("11/02/2016");

        Calendar calendar = Calendar.getInstance();  
        calendar.setTime(date);  

        System.out.println("First Day Of Month : " + calendar.getActualMinimum(Calendar.DAY_OF_MONTH));  
        System.out.println("Last Day of Month  : " + calendar.getActualMaximum(Calendar.DAY_OF_MONTH)); 

Calendar.getInstance().getActualMaximum(Calendar.DAY_OF_MONTH);

यह वर्तमान माह के लिए वास्तविक अधिकतम देता है। उदाहरण के लिए यह अब लीप वर्ष का फरवरी है, इसलिए यह int रूप में 29 लौटाता है।





calendar