用calendar.add(Calendar.Month,1)的方法,获取下一月相同的日期java
若是第一个月有31天,第二个月不足31天,加上一月后是自动调整到第二个月的最后一天,仍是顺延到下一个月?spa
用的环境是JAVA SE-1.8。code
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); try{ Date d = sdf.parse("2017-01-31"); Calendar cld = Calendar.getInstance(); cld.setTime(d); cld.add(Calendar.MONTH, 1); Date d2 = cld.getTime(); System.out.println(sdf.format(d)+"加一月:"+sdf.format(d2)); //闰年的状况 d = sdf.parse("2016-01-31"); cld = Calendar.getInstance(); cld.setTime(d); cld.add(Calendar.MONTH, 1); d2 = cld.getTime(); System.out.println(sdf.format(d)+"加一月:"+sdf.format(d2)); }catch(Exception e){ e.printStackTrace(); }
输出结果:orm
2017-01-31加一月:2017-02-28
2016-01-31加一月:2016-02-29get
答案是自动调整为下月的最后一天。it
那么按月累加的状况就要注意了,假如要取得某个月的31号,必须从有31号的月份得到,而不是每一个循环添加1月。io
get,add,set方法ast
package cn.itcast_02; import java.util.Calendar; /* * public void add(int field,int amount):根据给定的日历字段和对应的时间,来对当前的日历进行操做。(根据日历字段,增长或减去) * public final void set(int year,int month,int date):设置当前日历的年月日。(直接设置日历值); */ public class CalendarDemo { public static void main(String[] args) { // 获取当前的日历时间 Calendar c = Calendar.getInstance(); // 获取月 int year = c.get(Calendar.YEAR); // 获取月 int month = c.get(Calendar.MONTH); // 获取日 int date = c.get(Calendar.DATE); System.out.println(year + "年" + (month + 1) + "月" + date + "日"); // // 三年前的今天 // c.add(Calendar.YEAR, -3); // // 获取月 // year = c.get(Calendar.YEAR); // // 获取月 // month = c.get(Calendar.MONTH); // // 获取日 // date = c.get(Calendar.DATE); // System.out.println(year + "年" + (month + 1) + "月" + date + "日"); // 5年后的10天前 c.add(Calendar.YEAR, 5); c.add(Calendar.DATE, -10); // 获取月 year = c.get(Calendar.YEAR); // 获取月 month = c.get(Calendar.MONTH); // 获取日 date = c.get(Calendar.DATE); System.out.println(year + "年" + (month + 1) + "月" + date + "日");// 2021年11月30日 System.out.println("-----------"); c.set(2011, 11, 11); // 获取月 year = c.get(Calendar.YEAR); // 获取月 month = c.get(Calendar.MONTH); // 获取日 date = c.get(Calendar.DATE); System.out.println(year + "年" + (month + 1) + "月" + date + "日"); } }