诚求解释

TCH790177486 2012-03-23 11:48:25
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());
}
}
...全文
105 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
TCH790177486 2012-03-28
  • 打赏
  • 举报
回复
我也感觉是刷新的问题,那有没有办法直接得到正确的结果呢?
TCH790177486 2012-03-28
  • 打赏
  • 举报
回复
我也感觉是刷新的问题,那有没有办法直接得到正确的结果呢?
dryZeng 2012-03-23
  • 打赏
  • 举报
回复
你在比较哪两个结果?
TCH790177486 2012-03-23
  • 打赏
  • 举报
回复
为什么加和不加System.out.println(cal.getTime());
结果不一样???????
yuxuejun1123 2012-03-23
  • 打赏
  • 举报
回复
显然,根据程序的意思,打印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),一样可以得到正确的结果
菖蒲老先生 2012-03-23
  • 打赏
  • 举报
回复
什么叫不一样,
不管你有没有加System.out.println(cal.getTime());
cal.getTime()的值是不会变的,
加上那一句只是让你能直观地看到里面的值而已。
五哥 2012-03-23
  • 打赏
  • 举报
回复
加这个 System.out.println(cal.getTime());
只是在控制台打印信息 ,能有什么不一样 ?

难道控制台没输出这个 ?

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧