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




datetime netbeans calendar (8)

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

    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();

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

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

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

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

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

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


यहां नवीनतम java.time लाइब्रेरी का उपयोग करना सबसे अच्छा समाधान है:

LocalDate date = LocalDate.now();
LocalDate endOfMonth = date.with(TemporalAdjusters.lastDayOfMonth());

वैकल्पिक रूप से, आप कर सकते हैं:

LocalDate endOfMonth = date.withDayOfMonth(date.lengthOfMonth());

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

        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 cal = Calendar.getInstance();
cal.set(Calendar.DATE, cal.getActualMaximum(Calendar.DATE));

Date lastDayOfMonth = cal.getTime();

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

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) आपको अंतिम दिन देगा।


यदि आप एक महीने और एक वर्ष दिया गया तारीख चाहते हैं, तो यह सही लगता है:

public static DateTime GetLastDayOfMonth(this DateTime dateTime)
{
    return new DateTime(dateTime.Year, dateTime.Month, DateTime.DaysInMonth(dateTime.Year, dateTime.Month));
}




java datetime netbeans calendar