特定年份的特定月份的天数?

Kla*_*sos 150 java datetime calendar

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

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
Run Code Online (Sandbox Code Playgroud)

Hem*_*lia 341

Java 8及更高版本

@Warren M. Nocos.如果您尝试使用Java 8的新Date和Time API,则可以使用java.time.YearMonthclass.请参阅Oracle教程.

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

测试:在闰年中尝试一个月:

yearMonthObject = YearMonth.of(2000, 2);
daysInMonth = yearMonthObject.lengthOfMonth(); //29 
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

测试:在闰年中尝试一个月:

mycal = new GregorianCalendar(2000, Calendar.FEBRUARY, 1);
daysInMonth= mycal.getActualMaximum(Calendar.DAY_OF_MONTH);      // 29
Run Code Online (Sandbox Code Playgroud)

  • 如何在Java 8的新日期和时间API上执行此操作? (2认同)
  • @WarrenM.Nocos对于迟到的回应感到抱歉,但这几个月我没有活跃.请检查java 8解决方案的编辑. (2认同)

Jon*_*eet 40

java.util.Calendar的代码

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

int days = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
Run Code Online (Sandbox Code Playgroud)

Joda时间代码

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

int days = chronology.dayOfMonth().getMaximumValue(date);
Run Code Online (Sandbox Code Playgroud)

请注意,不是单独解析字符串值,而是最好使用您用来解析它的日期/时间API.在java.util.*你可能会使用SimpleDateFormat; 在Joda Time你会用到DateTimeFormatter.


Ale*_*s G 23

你可以使用Calendar.getActualMaximum方法:

Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, month);
int numDays = calendar.getActualMaximum(Calendar.DATE);
Run Code Online (Sandbox Code Playgroud)


Ale*_*uil 20

java.time.LocalDate

从Java 1.8,你可以使用的方法lengthOfMonthjava.time.LocalDate:

LocalDate date = LocalDate.of(2010, 1, 19);
int days = date.lengthOfMonth();
Run Code Online (Sandbox Code Playgroud)


小智 7

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

daysInMonth = 30;

else 

if (month == 2) 

daysInMonth = (leapYear) ? 29 : 28;

else 

daysInMonth = 31;
Run Code Online (Sandbox Code Playgroud)


Shl*_*Shl 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;
Run Code Online (Sandbox Code Playgroud)