java日期前推一个月

根据传一个日期格式的参数(不是当前日期),前推1个月再加上1天。
比如 2009-10-20 ,返回的就是2009-09-21
感觉一个个判断比较复杂,求个简单方法~

计算离当前日期之前或之后任意天的日期
/**

  • 日期计算
  • @author zhangmingxue
  • /
    public class ComputeDateUtils {
    /
    *

    • 计算出离当前日期datas天的日期,若datas小于0表示当前日期之前datas天,若datas大于0表当前日期之后datas天
    • @param 要计算的天数
    • @return 得到日期 */ public static Date getDate(int datas) { GregorianCalendar calendar = new GregorianCalendar(); calendar.add(GregorianCalendar.DATE, datas); String begin = new java.sql.Date(calendar.getTime().getTime()).toString(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date beginDate = null; try { beginDate = sdf.parse(begin); } catch (ParseException e) { e.printStackTrace(); } return beginDate; }

    /**

    • 计算出离beginDate日期datas天的日期,若datas小于0表示当前日期之前datas天,若datas大于0表当前日期之后datas天
    • @param 要计算的天数
    • @return 得到日期 */ public static Date getDate(Date beginDate, int datas) { Calendar beginCal=Calendar.getInstance(); beginCal.setTime(beginDate); GregorianCalendar calendar = new GregorianCalendar(beginCal.get(Calendar.YEAR),beginCal.get(Calendar.MONTH),beginCal.get(Calendar.DATE)); calendar.add(GregorianCalendar.DATE, datas); String begin = new java.sql.Date(calendar.getTime().getTime()).toString(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date endDate = null; try { endDate = sdf.parse(begin); } catch (ParseException e) { e.printStackTrace(); } return endDate; } }

dayMove==>

public static String dayMove(String date,int len){
    SimpleDateFormat sdf = new SimpleDateFormat ("yyyy-MM-dd");
    try {
        Calendar cal = Calendar.getInstance();
        cal.setTime(sdf.parse(date));
        cal.add(Calendar.DATE, len);
        return sdf.format(cal.getTime());   
    } catch (Exception e) {
        return date;
    }

}

monthMove==>

public static String monthMove(String date,int len){
    SimpleDateFormat sdf = new SimpleDateFormat ("yyyy-MM");
    try {
        Calendar cal = Calendar.getInstance();
        cal.setTime(sdf.parse(date));
        cal.add(Calendar.MONTH, len);
        return sdf.format(cal.getTime());   
    } catch (Exception e) {
        return date;
    }
}

参考:http://zmx.iteye.com/admin/blogs/410635

/**
*date:传进来的时间
*len:需要改变的天数,正负均可
*/
public static String getDay(String date,int len){
SimpleDateFormat sdf = new SimpleDateFormat ("yyyy-MM-dd");
try {
Calendar cal = Calendar.getInstance();
cal.setTime(sdf.parse(date));
cal.add(Calendar.DATE, len);
return sdf.format(cal.getTime());
} catch (Exception e) {
return date;
}
}