import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;public class Zuoye { public static void main(String[] args) throws ParseException {
Zuoye z=new Zuoye();
z.specDate("2011-3-22", 3);
} void specDate(String generateDate, int period) throws ParseException{
String s="yyyy-MM-dd";
SimpleDateFormat sdf=new SimpleDateFormat(s);
Date date=sdf.parse(generateDate);       //将String对象变换为Date类型
Calendar cal=Calendar.getInstance();
cal.setTime(date);       //将Date转换为Calendar

cal.set(Calendar.MONTH, cal.get(Calendar.MONTH)+period);       //将月份加往后推三个月
int i=cal.get(Calendar.DAY_OF_MONTH)-14;

cal.set(Calendar.DAY_OF_MONTH,i );
//System.out.println(cal.getTime());
cal.set(GregorianCalendar.DAY_OF_WEEK, Calendar.FRIDAY);//将日期变为所在日期的周五
System.out.println(cal.getTime());
}
}

解决方案 »

  1.   

    为什么加和不加System.out.println(cal.getTime());
    结果不一样???????
      

  2.   

    加这个 System.out.println(cal.getTime());
    只是在控制台打印信息 ,能有什么不一样 ?难道控制台没输出这个 ?
      

  3.   

    什么叫不一样,
    不管你有没有加System.out.println(cal.getTime());
    cal.getTime()的值是不会变的,
    加上那一句只是让你能直观地看到里面的值而已。
      

  4.   

    显然,根据程序的意思,打印Fri Jun 21 00:00:00 CST 2012,这个结果是错的,因为当前日期22-14之后应该打印8才对,但是却不是,而加上System.out.println(cal.getTime());之后,结果是正确的。
    那是什么造成了前后差别那么大呢,这个我好好查了一下,原来在 Calendar 的方法中Set()之后,set的结果是不会立马刷新的,及时使用Thread.sleep()也无用,必须调用getTime()或者add()方法才会让 Calendar 立刻刷新。
    所以楼主,这个问题与打印不打印无关,而是刷新的问题,不信可以将System.out.println(cal.getTime());换成其他的比如cal.get(Calendar.MILLISECOND),一样可以得到正确的结果