বিশেষ বছরের বিশেষ মাসে কত দিনের?


158

নির্দিষ্ট বছরের নির্দিষ্ট মাস কত দিন থাকে?

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

7
ঠিক আপনার প্রশ্ন কি?
শান-এইচ_ফেল

অবগতির জন্য, যেমন ভয়ঙ্কর বিরক্তিজনক পুরাতন তারিখ-সময় শ্রেণীর java.util.Date, java.util.Calendarএবং java.text.SimpleDateFormatএখন উত্তরাধিকার দ্বারা supplanted java.time জাভা 8 এবং পরে পাতাটা ক্লাস। ওরাকল দ্বারা টিউটোরিয়াল দেখুন ।
বাসিল বাউর্ক

উত্তর:


368

জাভা 8 এবং তারপরে

@ ওয়ারেন এম নোকস আপনি যদি জাভা 8-র নতুন তারিখ এবং সময় API ব্যবহার করার চেষ্টা করছেন , আপনি 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 

জাভা 7 এবং তার আগের

একটি ক্যালেন্ডার তৈরি করুন, বছর এবং মাস সেট করুন এবং ব্যবহার করুন 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

2
জাভা 8 এর নতুন তারিখ এবং সময় এপিআইতে এটি কীভাবে করবেন?
ওয়ারেন এম নোকস

2
@ ওয়ারেনএম.নোকস দেরিতে সাড়া দেওয়ার জন্য দুঃখিত, তবে আমি এই মাসে সক্রিয় ছিলাম না। দয়া করে জাভা 8 এর সমাধানের জন্য সম্পাদনাটি দেখুন
হেমন্ত ধাতিয়া

জাভা 8 এর আগের হিসাবে… জাভা.টাইম কার্যকারিতার বেশিরভাগটি থ্রিটেন-ব্যাকপোর্ট প্রকল্পে জাভা 6 এবং জাভা 7-এ ব্যাক -পোর্ট করা হয়েছেথ্রিটেনএবিপি প্রকল্পে পূর্ববর্তী অ্যান্ড্রয়েডের জন্য আরও অভিযোজিত । দেখুন ThreeTenABP কীভাবে ব্যবহার করতে হয় ...
তুলসী বাউর্ক

43

জাভা.ইটিল.ক্যালেন্ডারের জন্য কোড

আপনার যদি ব্যবহার করতে হয় তবে java.util.Calendarআমার সন্দেহ হয় আপনি চান:

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

জোদা সময় জন্য কোড

ব্যক্তিগতভাবে, তবে, আমি শুরু করার পরিবর্তে জোদা সময় ব্যবহার করার পরামর্শ দিই java.util.{Calendar, Date}, আপনি যদি ব্যবহার করতে পারেন তবে:

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

দ্রষ্টব্য যে পৃথকভাবে স্ট্রিংয়ের মানগুলি পার্স করার পরিবর্তে আপনি যে কোনও তারিখ / সময় API এটিকে পার্স করার জন্য ব্যবহার করছেন তা ভাল। ইন java.util.*আপনি ব্যবহার পারে SimpleDateFormat; জোদা সময় আপনি একটি ব্যবহার চাই DateTimeFormatter


27

আপনি Calendar.getActualMaximumপদ্ধতিটি ব্যবহার করতে পারেন :

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


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

daysInMonth = 30;

else 

if (month == 2) 

daysInMonth = (leapYear) ? 29 : 28;

else 

daysInMonth = 31;

ক্যালেন্ডার সি = ক্যালেন্ডার.জেটআইনস্ট্যান্স (); সি.সেট (ক্যালেন্ডার। ডিওয়াইআম_মোনথ, সি। ভিজিট অ্যাকচুয়ালম্যাক্সিমাম (ক্যালেন্ডার। ডিওয়াইআর_মোনথ)); // আসল সর্বাধিক কোজ পাওয়ার আগে আপনি বছরটি সেট করতে পারেন সেগুলি একই নাও হতে পারে। অর্থাত্ 2011 এবং 2012 সালের ফেব্রুয়ার একই দৈর্ঘ্যের নয় (লিপ বছর)
রোজ

5

এটি গাণিতিক উপায়:

বছরের জন্য, মাস (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;

3

আমি এর মতো সমাধানের জন্য যাব:

int monthNr = getMonth();
final Month monthEnum = Month.of(monthNr);
int daysInMonth;
if (monthNr == 2) {
    int year = getYear();
    final boolean leapYear = IsoChronology.INSTANCE.isLeapYear(year);
    daysInMonth = monthEnum.length(leapYear);
} else {
    daysInMonth = monthEnum.maxLength();
}

যদি মাসটি ফেব্রুয়ারি না হয় (মামলার 92%), এটি কেবলমাত্র মাসের উপর নির্ভর করে এবং বছরটি জড়িত না করা আরও দক্ষ। এইভাবে, এটি লীপ বছর কিনা তা জানার জন্য আপনার যুক্তিবাদকে কল করতে হবে না এবং 92% ক্ষেত্রে আপনার বারটি পাওয়ার দরকার নেই। এবং এটি এখনও পরিষ্কার এবং খুব পঠনযোগ্য কোড।


1
আমি পুরো যুক্তিটিকে একটি প্রমাণিত গ্রন্থাগার পদ্ধতিতে রেখে যেতে পছন্দ করব - আমি মনে করি আপনি খুব অকালই অপ্টিমাইজ করছেন এবং লাইব্রেরির পদ্ধতিগুলি অদক্ষ নয়। তবুও আধুনিক জাভা.টাইম ব্যবহারের জন্য উত্সাহিত।
ওলে ভিভি

@ OleV.V। সত্য, অনেক ক্ষেত্রেই প্রমাণিত লাইব্রেরিতে অপ্টিমাইজেশন রেখে যাওয়া আরও ভাল হতে পারে। তবে, এক্ষেত্রে বিদ্যমান গ্রন্থাগারগুলিতে এক মাস এবং বছর পাস করতে হবে। সুতরাং এর অর্থ হল যে পদ্ধতিটি 92% ক্ষেত্রে মানটি ব্যবহার করবে না তবুও বছরটি যাই হোক না কেন আমার যা করা দরকার তা করা দরকার। সুতরাং, এটি একটি অংশ এটি আমার জন্য অনুকূলিত করতে পারে না। আমার যুক্তিটি সেই কারণের সাথে সমান যা আপনার যদি কোনও অক্ষম হয়ে থাকতে পারে এমন লগারের কাছে একটি মান দেওয়ার জন্য কোনও পদ্ধতি কল না করা উচিত। কোনও উপায় নেই যে লগার এটি অপ্টিমাইজ করতে পারে।
স্টেফান মোনডিলার্স

1

জাভা 8-এ আপনি কোনও তারিখের ক্ষেত্র থেকে ভ্যালুরেঞ্জ পেতে পারেন।

LocalDateTime dateTime = LocalDateTime.now();

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

এটি আপনাকে মাঠে প্যারামিটারাইজ করতে দেয়।


1

যে হিসাবে সহজ, কিছুই আমদানি করার প্রয়োজন নেই

public static int getMonthDays(int month, int year) {
    int daysInMonth ;
    if (month == 4 || month == 6 || month == 9 || month == 11) {
        daysInMonth = 30;
    }
    else {
        if (month == 2) {
            daysInMonth = (year % 4 == 0) ? 29 : 28;
        } else {
            daysInMonth = 31;
        }
    }
    return daysInMonth;
}

এটি ঠিক আছে, যদি আপনার ভবিষ্যতে historicalতিহাসিক তারিখ বা তারিখের প্রয়োজন না হয়। বছরের ফেব্রুয়ারির জন্য যা 100 এর গুণক তবে 400 এর গুণক নয়, এটি ভুল হবে। তবে আমি একমত, বেশিরভাগ অ্যাপ্লিকেশনগুলিতে এটি করবে এবং এটি দক্ষ।
স্টেফান মোনডিলার্স

1
// 1 means Sunday ,2 means Monday .... 7 means Saturday
//month starts with 0 (January)

MonthDisplayHelper monthDisplayHelper = new MonthDisplayHelper(2019,4);
int numbeOfDaysInMonth = monthDisplayHelper.getNumberOfDaysInMonth();

1
এটি লক্ষণীয় যে এটি অ্যান্ড্রয়েডের জন্য ( android.util.MonthDisplayHelper)
বার্বসান

0
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/*
 * 44. Return the number of days in a month
 * , where month and year are given as input.
 */
public class ex44 {
    public static void dateReturn(int m,int y)
    {
        int m1=m;
        int y1=y;
        String str=" "+ m1+"-"+y1;
        System.out.println(str);
        SimpleDateFormat sd=new SimpleDateFormat("MM-yyyy");

        try {
            Date d=sd.parse(str);
            System.out.println(d);
            Calendar c=Calendar.getInstance();
            c.setTime(d);
            System.out.println(c.getActualMaximum(Calendar.DAY_OF_MONTH));
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }
    public static void main(String[] args) {
dateReturn(2,2012);


    }

}

1
এই উত্তরটি বিদ্যমান এবং স্বীকৃত উত্তরের চেয়ে কোন মূল্য সরবরাহ করে? এছাড়াও, দয়া করে আপনার কোড সহ কিছু ব্যাখ্যা বা বিবরণ যুক্ত করুন। স্ট্যাকওভারফ্লো একটি স্নিপেট লাইব্রেরির চেয়ে বেশি।
বেসিল বাউরক

0
public class Main {

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

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

    }
}

6
পাশাপাশি কিছু ব্যাখ্যা যুক্ত করুন।
ব্ল্যাকবিয়ার্ড

1
স্ট্যাক ওভারফ্লোতে স্বাগতম! যদিও এই কোড স্নিপেট একটি সমাধান সহ সমাধান হতে পারে, সত্যিই আপনার পোস্টের গুণমান উন্নত করতে সহায়তা করে। মনে রাখবেন যে আপনি ভবিষ্যতে পাঠকদের জন্য প্রশ্নের উত্তর দিচ্ছেন, এবং সেই লোকেরা আপনার কোড পরামর্শের কারণগুলি জানেন না।
yivi

0

পুরানো Calendarএপিআই এর ব্যবহার এড়ানো উচিত।

জাভা 8 বা উচ্চতর সংস্করণে এটি দিয়ে করা যেতে পারে YearMonth

উদাহরণ কোড:

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

Call requires API level 26 (current min is 21): java.time.YearMonth#lengthOfMonth
ভ্লাদ

0

আপনি যদি বছর ও মাসের মানটিকে হার্ডকোড করতে না চান এবং আপনি বর্তমান তারিখ এবং সময় থেকে মানটি নিতে চান তবে এটি এটিকে সহজ করে তুলুন:

Date d = new Date();
String myDate = new SimpleDateFormat("dd/MM/yyyy").format(d);
int iDayFromDate = Integer.parseInt(myDate.substring(0, 2));
int iMonthFromDate = Integer.parseInt(myDate.substring(3, 5));
int iYearfromDate = Integer.parseInt(myDate.substring(6, 10));

YearMonth CurrentYear = YearMonth.of(iYearfromDate, iMonthFromDate);
int lengthOfCurrentMonth = CurrentYear.lengthOfMonth();
System.out.println("Total number of days in current month is " + lengthOfCurrentMonth );

0

আপনি ক্যালেন্ডার.জেট অ্যাক্টুয়ালম্যাক্সিমাম পদ্ধতিটি ব্যবহার করতে পারেন:

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

এবং মাস -1 হ'ল কারণ মাসটি মাসের মূল সংখ্যাটি নেয় যদিও পদ্ধতিতে ক্যালেন্ডারে থাকে .c

public int getActualMaximum(int field) {
   throw new RuntimeException("Stub!");
}

এবং (ইনট ফিল্ড) নীচের মত।

public static final int JANUARY = 0;
public static final int NOVEMBER = 10;
public static final int DECEMBER = 11;

0

নিম্নলিখিত পদ্ধতি আপনাকে কোনও নির্দিষ্ট মাসে কয়েকটি দিন সরবরাহ করবে

public static int getNoOfDaysInAMonth(String date) {
    Calendar cal = Calendar.getInstance();
    cal.setTime(date);
    return (cal.getActualMaximum(Calendar.DATE));
}

0

একটি অনুকূল এবং পারফরম্যান্স বৈকল্পিক:

public static int daysInMonth(int month, int year) {
    if (month != 2) {
        return 31 - (month - 1) % 7 % 2;
    }
    else {
        if ((year & 3) == 0 && ((year % 25) != 0 || (year & 15) == 0)) { // leap year
            return 29;
        } else {
            return 28;
        }
    }
}

লিপ অ্যালগরিদম চেক করতে আরও তথ্যের জন্য এখানে


-1
String  MonthOfName = "";
int number_Of_DaysInMonth = 0;

//year,month
numberOfMonth(2018,11); // calling this method to assign values to the variables MonthOfName and number_Of_DaysInMonth 

System.out.print("Number Of Days: "+number_Of_DaysInMonth+"   name of the month: "+  MonthOfName );

public void numberOfMonth(int year, int month) {
    switch (month) {
        case 1:
            MonthOfName = "January";
            number_Of_DaysInMonth = 31;
            break;
        case 2:
            MonthOfName = "February";
            if ((year % 400 == 0) || ((year % 4 == 0) && (year % 100 != 0))) {
                number_Of_DaysInMonth = 29;
            } else {
                number_Of_DaysInMonth = 28;
            }
            break;
        case 3:
            MonthOfName = "March";
            number_Of_DaysInMonth = 31;
            break;
        case 4:
            MonthOfName = "April";
            number_Of_DaysInMonth = 30;
            break;
        case 5:
            MonthOfName = "May";
            number_Of_DaysInMonth = 31;
            break;
        case 6:
            MonthOfName = "June";
            number_Of_DaysInMonth = 30;
            break;
        case 7:
            MonthOfName = "July";
            number_Of_DaysInMonth = 31;
            break;
        case 8:
            MonthOfName = "August";
            number_Of_DaysInMonth = 31;
            break;
        case 9:
            MonthOfName = "September";
            number_Of_DaysInMonth = 30;
            break;
        case 10:
            MonthOfName = "October";
            number_Of_DaysInMonth = 31;
            break;
        case 11:
            MonthOfName = "November";
            number_Of_DaysInMonth = 30;
            break;
        case 12:
            MonthOfName = "December";
            number_Of_DaysInMonth = 31;
    }
}

-1

এটি আমার পক্ষে ভাল কাজ করেছে।

এটি একটি নমুনা আউটপুট

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. 
    } 
} //abhinavsthakur00@gmail.com

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

ইতিমধ্যে গৃহীত এমন প্রশ্নের উত্তর দেওয়ার দরকার নেই, যতক্ষণ না উত্তরটি কোনওভাবেই অবৈধ।
দীপক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.