calendar add和set的区别
的有关信息介绍如下:Calendar类的set()和add()方法对日期的变化有些不同:具体实现如下: set():单纯的设定日期,如果设定的日期不存在的话,他会向下移动。Add():它移动的是日期的偏移量。例如: set : 2009/07/31 3个月前的日期是 :2009/05/01 add : 2009/07/31 3个月前的日期是 :2009/04/30代码实现如下:static String getDateEndOfPeriod( StringdateBefore,int period ){ Calendar cld =Calendar.getInstance(); String dateAfter = ""; if( dateBefore == null ||dateBefore.length()==0){ returnnull; } String year =dateBefore.substring(0,4); String month =dateBefore.substring(4,6); String day =dateBefore.substring(6,8); //开始日カレンダー cld.clear(); cld.setLenient(true); cld.set( Calendar.YEAR,Integer.valueOf(year).intValue() ); cld.set( Calendar.MONTH,Integer.valueOf(month).intValue() - 1); cld.set( Calendar.DATE,Integer.valueOf(day).intValue()); //このメソッドには偏移量の移动、结果的に2009/07/31--3ヶ月前--->2009/04/30 cld.add(Calendar.MONTH,-period); //単纯にセットしているので日付ない日には次の日を移动する、结果的に2009/07/31--3ヶ月前--->2009/05/01// cld.set( Calendar.MONTH,Integer.valueOf(month).intValue() - 1 - period); int mon =cld.get(Calendar.MONTH) + 1; int dy =cld.get(Calendar.DATE); dateAfter =String.valueOf(cld.get(Calendar.YEAR)) + ( mon< 10 ? "0" + String.valueOf(mon) :String.valueOf(mon) ) + ( dy< 10 ? "0" + String.valueOf(dy) : String.valueOf(dy)); return dateAfter; }