我想取得指定日期前一天的日期,程序如下,问题是输入日期是“20090101”,但程序取得的前一天日期却是“20091231”,应该是“20081231”,这是为什么,请各位大虾帮帮忙啊!!! /**
 *   main方法
 */
public static void main(String[] args) {

String strDate = "20090101";
Date date = cnvDate(strDate);

java.util.Calendar calendar11=java.util.Calendar.getInstance();   
calendar11.setTime(date);
         calendar11.roll(java.util.Calendar.DAY_OF_YEAR, -1);    
         Date aa = calendar11.getTime();

String idoYmdStr3 = dateToString(aa);

System.out.println(idoYmdStr3);
} /**
 * 将指定日期由String型转换成Date型
 */
private Date cnvDate(String sData) {
Date resDate;
SimpleDateFormat sdf = (SimpleDateFormat) SimpleDateFormat.getDateInstance();

sdf.setLenient(true);
sdf.applyPattern("yyyyMMdd");
                  resDate = sdf.parse(sData);                  return resDate;
} /**
 * 将指定日期由Date型转换成String型
 */
private String dateToString(Date sData) {
String strDate = null;
if (sData != null) {
try {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
strDate = dateFormat.format(sData);
} catch (Exception ex) {
strDate = null;
}

return strDate;
}

解决方案 »

  1.   

    roll不改变比他大的字段字段。
    使用add方法吧.
      

  2.   

     试试 
     calendar11.add(Calendar.DAY_OF_MONTH, -1);
     
      

  3.   

    减去一天对应的毫秒数SimpleDateFormat format = new SimpleDateFormat( "yyyyMMdd" );
    Date d1 = format.parse("20090101");
    Date d2 = new Date(d1.getTime()-24*60*60*1000L);
      

  4.   

    calendar11.add(Calendar.DAY_OF_MONTH, -1);   用这个保险点.
      

  5.   

    为什么用add方法保险??用减去一天的毫秒数的方法有什么弊端么??