Calendar类的set()和add()方法对日期的变化有些不同:
具体实现如下:
set():单纯的设定日期,如果设定的日期不存在的话,他会向下移动。
Add():它移动的是日期的偏移量。
例如:
set : 2009/07/31 3个月前的日期是 :
2009/05/01
add : 2009/07/31 3个月前的日期是 :
2009/04/30
代码实现如下:
static String getDateEndOfPeriod( String
dateBefore,int period ){
Calendar cld =
Calendar.getInstance();
String dateAfter = "";
if( dateBefore == null ||
dateBefore.length()==0){
return
null;
}
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;
}
标签:calendar,add,set