代码如下:
public static String getLastDayOfMonth(int year,int month)
{
Calendar cal = Calendar.getInstance();
//设置年份
cal.set(Calendar.YEAR,year);
//设置月份
cal.set(Calendar.MONTH, month-1);
//获取某月最大天数
int lastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
//设置日历中月份的最大天数
cal.set(Calendar.DAY_OF_MONTH, lastDay);
//格式化日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String lastDayOfMonth = sdf.format(cal.getTime());
return lastDayOfMonth;
}
但是得到的数据不正确,比如传入2022,6,得到的lastDayOfMonth月份是7月1日,想要的应该是6月30日才对。研究后发现如果在设置月份最大天数的时候如果超过了当月的天数,会自动转换成下个月,即6月设置了31天,那么会转换成7月1号。上面的代码问题在于Calendar cal = Calendar.getInstance();获取的是当前时间,如果今天是31号,那么在//设置月份时,设置了6月,由于6月没有31号,会转换成7月1号,那么我们获取到的某月最大天数就不是6月的了,导致了结果跟需求不一样。
只需要在设置月份前,把当前时间日期改成当月最小时间就可以了,改进后代码如下:
public static String getLastDayOfMonth(int year,int month)
{
Calendar cal = Calendar.getInstance();
/******************/
//获取某月最小天数
int minDay = cal.getActualMinimum(Calendar.DATE);
//设置日历中月份的最小天数
cal.set(Calendar.DAY_OF_MONTH, minDay);
/******************/
//设置年份
cal.set(Calendar.YEAR,year);
//设置月份
cal.set(Calendar.MONTH, month-1);
//获取某月最大天数
int lastDay = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
//设置日历中月份的最大天数
cal.set(Calendar.DAY_OF_MONTH, lastDay);
//格式化日期
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String lastDayOfMonth = sdf.format(cal.getTime());
return lastDayOfMonth;
}