特定年份特定月份的天数?Java 8 及更高版本Java 7 及更早版本

2022-08-31 06:34:36

如何知道特定年份的特定月份有多少天?

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

答案 1

Java 8 及更高版本

@Warren M.诺科斯。如果您尝试使用Java 8的新日期和时间API,则可以使用java.time.YearMonth类。请参阅 Oracle 教程

// 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 

Java 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

Java.util.Calendar 的代码

如果你必须使用,我怀疑你想要:java.util.Calendar

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

乔达时间代码

但是,就个人而言,我建议使用Joda Time而不是开始,在这种情况下,您可以使用:java.util.{Calendar, Date}

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

请注意,与其单独解析字符串值,不如获取用于解析字符串值的任何日期/时间 API。在你可以使用 ;在Joda Time中,您将使用.java.util.*SimpleDateFormatDateTimeFormatter