java - विशेष वर्ष के विशेष महीने में दिनों की संख्या?




datetime calendar (13)

    String date = "11-02-2000";
    String[] input = date.split("-");
    int day = Integer.valueOf(input[0]);
    int month = Integer.valueOf(input[1]);
    int year = Integer.valueOf(input[2]);
    Calendar cal=Calendar.getInstance();
    cal.set(Calendar.YEAR,year);
    cal.set(Calendar.MONTH,month-1);
    cal.set(Calendar.DATE, day);
    //since month number starts from 0 (i.e jan 0, feb 1), 
    //we are subtracting original month by 1
    int days = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
    System.out.println(days);

कैसे पता चलेगा कि किस वर्ष विशेष वर्ष का विशेष महीना है?

String date = "2010-01-19";
String[] ymd = date.split("-");
int year = Integer.parseInt(ymd[0]);
int month = Integer.parseInt(ymd[1]);
int day = Integer.parseInt(ymd[2]);
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR,year);
calendar.set(Calendar.MONTH,month);
int daysQty = calendar.getDaysNumber(); // Something like this

java.time.LocalDate

जावा 1.8 से, आप lengthOfMonth पर विधि lengthOfMonth उपयोग कर सकते हैं। java.time.LocalDate :

LocalDate date = LocalDate.of(2010, 1, 19);
int days = date.lengthOfMonth();

आप Calendar.getActualMaximum getActualMaximum विधि का उपयोग कर सकते हैं:

Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, month);
int numDays = calendar.getActualMaximum(Calendar.DATE);

निम्नलिखित विधि आपको किसी विशेष माह में दिनों की संख्या प्रदान करेगी

public static int getNoOfDaysInAMonth(String date) {

        Calendar cal = Calendar.getInstance();
        cal.setTime(date);
        return (cal.getActualMaximum(Calendar.DATE));
    }

यह मेरे लिए ठीक काम किया।

यह एक नमूना आउटपुट है

import java.util.*;

public class DaysInMonth{ 

public static void main(String args []){ 

Scanner input = new Scanner(System.in); 
System.out.print("Enter a year:"); 

int year = input.nextInt(); //Moved here to get input after the question is asked 

System.out.print("Enter a month:"); 
int month = input.nextInt(); //Moved here to get input after the question is asked 

int days = 0; //changed so that it just initializes the variable to zero
boolean isLeapYear = (year % 4 == 0 && year % 100 != 0)||(year % 400 == 0); 

switch (month){ 
case 1: 
days = 31; 
break; 
case 2: 
if (isLeapYear) 
days = 29; 
else 
days = 28; 
break; 
case 3: 
days = 31; 
break; 
case 4: 
days = 30; 
break; 
case 5: 
days = 31; 
break; 
case 6: 
days = 30; 
break; 
case 7: 
days = 31; 
break; 
case 8: 
days = 31; 
break; 
case 9: 
days = 30; 
break; 
case 10: 
days = 31; 
break; 
case 11: 
days = 30; 
break; 
case 12: 
days = 31; 
break; 
default: 
String response = "Have a Look at what you've done and try again";
System.out.println(response); 
System.exit(0); 
} 
String response = "There are " +days+ " Days in Month "+month+ " of Year " +year+ ".\n"; 
System.out.println(response); // new line to show the result to the screen. 
} 
} //[email protected]

यह गणितीय तरीका है:

साल के लिए, महीने (1 से 12):

int daysInMonth = month == 2 ? 
    28 + (year % 4 == 0 ? 1:0) - (year % 100 == 0 ? (year % 400 == 0 ? 0 : 1) : 0) :
    31 - (month-1) % 7 % 2;

कैलेंडर बनाएं, साल और महीना सेट करें और getActualMaximum उपयोग getActualMaximum

int iYear = 1999;
int iMonth = Calendar.FEBRUARY; // 1 (months begin with 0)
int iDay = 1;

// Create a calendar object and set year and month
Calendar mycal = new GregorianCalendar(iYear, iMonth, iDay);

// Get the number of days in that month
int daysInMonth = mycal.getActualMaximum(Calendar.DAY_OF_MONTH); // 28

टेस्ट : लीप वर्ष में एक महीने का प्रयास करें:

mycal = new GregorianCalendar(2000, Calendar.FEBRUARY, 1);
daysInMonth= mycal.getActualMaximum(Calendar.DAY_OF_MONTH);      // 29

संपादित करें: जावा 8 के लिए समाधान

@ वॉरेन एम। नोकोस। यदि आप जावा 8 की नई डेट और टाइम एपीआई का उपयोग करने की कोशिश कर रहे हैं, तो आप java.time.YearMonth क्लास का उपयोग कर सकते हैं।

// Get the number of days in that month
YearMonth yearMonthObject = YearMonth.of(1999, 2);
int daysInMonth = yearMonthObject.lengthOfMonth(); //28  

टेस्ट: लीप वर्ष में एक महीने का प्रयास करें:

yearMonthObject = YearMonth.of(2000, 2);
daysInMonth = yearMonthObject.lengthOfMonth(); //29 

if (month == 4 || month == 6 || month == 9 || month == 11)

daysInMonth = 30;

else 

if (month == 2) 

daysInMonth = (leapYear) ? 29 : 28;

else 

daysInMonth = 31;

public class Main {

    private static LocalDate local=LocalDate.now();
    public static void main(String[] args) {

            int month=local.lengthOfMonth();
            System.out.println(month);

    }
}

Java.util.Calendar के लिए कोड

अगर आपको java.util.Calendar का उपयोग करना है, तो मुझे संदेह है कि आप चाहते हैं:

int days = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);

जोडा समय के लिए कोड

व्यक्तिगत रूप से, हालांकि, मैं java.util.{Calendar, Date} बजाय जोडा समय का उपयोग करने का सुझाव java.util.{Calendar, Date} से शुरू करने के लिए, इस मामले में आप इसका उपयोग कर सकते हैं:

int days = chronology.dayOfMonth().getMaximumValue(date);

ध्यान दें कि स्ट्रिंग मानों को अलग-अलग पार्स करने के बजाए, आप जिस भी दिनांक / समय एपीआई का उपयोग कर रहे हैं उसे पाने के लिए बेहतर होगा। SimpleDateFormat java.util.* आप SimpleDateFormat उपयोग कर सकते हैं; जोडा समय में आप डेटटाइमफॉर्मेटर का उपयोग करेंगे।


पुरानी Calendar एपीआई का उपयोग टालना चाहिए।

जावा 8 या उच्चतर संस्करण में, यह YearMonth साथ किया जा सकता है।

उदाहरण कोड:

int year = 2011;
int month = 2;
YearMonth yearMonth = YearMonth.of(year, month);
int lengthOfMonth = yearMonth.lengthOfMonth();
System.out.println(lengthOfMonth);

जावा 8 में आप किसी दिनांक के क्षेत्र से ValueRange प्राप्त कर सकते हैं।

LocalDateTime dateTime = LocalDateTime.now();

ChronoField chronoField = ChronoField.MONTH_OF_YEAR;
long max = dateTime.range(chronoField).getMaximum();

यह आपको फ़ील्ड पर पैरामीटर करने की अनुमति देता है।


यदि आपकी खोज कई सालों से अधिक है, और आप अभी भी मासिक समूह बनाना चाहते हैं, तो मेरा सुझाव है:

संस्करण 1:

SELECT SQL_NO_CACHE YEAR(record_date), MONTH(record_date), COUNT(*)
FROM stats
GROUP BY DATE_FORMAT(record_date, '%Y%m')

संस्करण # 2 (अधिक कुशल) :

SELECT SQL_NO_CACHE YEAR(record_date), MONTH(record_date), COUNT(*)
FROM stats
GROUP BY YEAR(record_date)*100 + MONTH(record_date)

मैंने इन संस्करणों की तुलना एक बड़ी मेज पर 1,357,918 पंक्तियों ( innodb ) के साथ की, और दूसरे संस्करण में बेहतर परिणाम दिखाई देते हैं।

संस्करण 1 (10 निष्पादन का औसत) : 1.404 सेकेंड
संस्करण 2 (10 निष्पादन का औसत) : 0.780 सेकेंड

( SQL_NO_CACHE को क्वेरी से पूछताछ से रोकने के लिए SQL_NO_CACHE कुंजी जोड़ा गया।)







java datetime calendar