java calendar设置上个月时,日期不存在或错误提示
java进行日期计算时
上个月日期一般使用:
calendar.set(calendar.month, calendar.get(calendar.month) - 1); // 设置为上一个月
进行,操作,但是当月份不存在、日期不存在如:4.31 2.31 不存在的日期时,处理就容易出现问题,此处仅提供思路可以按照自己显示。
calendar calendar = calendar.getinstance(); calendar.settime(date); // 设置为当前时间
如果出现不存在的日期会自动按照日期数进行推算
如4.31会自动生成5.1 2.31会自动生成3.3号,并不是所有的都顺延到下个月1号。
知道这里就知道该怎么办了
/**
* 获取上个月的今天
* @param time
* @return
*/
public static string getpreviousmonth(string time,string simpledateformat) {
try {
if(stringutils.isblank(time)){
return "";
}
simpledateformat simpledateformat = new simpledateformat(simpledateformat);//注意月份是mm
date date = simpledateformat.parse(time);
calendar calendar = calendar.getinstance();
calendar.settime(date); // 设置为当前时间
if(!time.equals(simpledateformat.format(date))){//如果当前日期不存在,系统会自动往后推。需要重置为1号
calendar.set(calendar.date, 1); //
}
int oldmonth = calendar.get(calendar.month);
calendar.set(calendar.month, calendar.get(calendar.month) - 1); // 设置为上一个月
int newmonth = calendar.get(calendar.month);
if(oldmonth == newmonth){
calendar.set(calendar.date, 1);
}
if(!time.equals(simpledateformat.format(date))){//判断如果是当前日期不存在,需要往前推一天(如11.31应该返回10.31)
calendar.set(calendar.date, calendar.get(calendar.date) - 1); // 设置为上一个天
calendar.gettime();
int day = integer.parseint(stringutils.substring(time, stringutils.lastindexof(time, "-") + 1, time.length()));
calendar.set(calendar.date, day);
}
date = calendar.gettime();
return simpledateformat.format(date);
} catch (parseexception e) {
e.printstacktrace();
return null;
}
}总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论