JAVA Calendar获取某月最后一天不正确cal.set(Calendar.MONTH, month)不正确bug

代码如下:

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;

}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值