一个日期打印问题的Demo

xzyr2046 2010-03-12 09:46:32
import java.text.DateFormatSymbols;
import java.util.*;
public class Demo01 {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
GregorianCalendar d=new GregorianCalendar();
int today=d.get(Calendar.DAY_OF_MONTH);
int month=d.get(Calendar.MONTH);
d.set(Calendar.DAY_OF_MONTH,1);
int weekday=d.get(Calendar.DAY_OF_WEEK);
int firstDayOfWeek=d.getFirstDayOfWeek();
int indent=0;
while(weekday!=firstDayOfWeek){
indent++;
d.add(Calendar.DAY_OF_MONTH,-1);
weekday=d.get(Calendar.DAY_OF_WEEK);
}
String[] weekdayNames=new DateFormatSymbols().getShortWeekdays();
do{
System.out.printf("%4s",weekdayNames[weekday]);
d.add(Calendar.DAY_OF_MONTH, 1);
weekday=d.get(Calendar.DAY_OF_WEEK);
}
while(weekday!=firstDayOfWeek);
System.out.println();
for(int i=0;i<=indent;i++)
System.out.print(" ");
d.set(Calendar.DAY_OF_MONTH, 1);
do{
int day=d.get(Calendar.DAY_OF_MONTH);
System.out.printf("%3d", day);
if(day==today)System.out.print("*");
else System.out.print(" ");
d.add(Calendar.DAY_OF_MONTH, 1);
weekday=d.get(Calendar.DAY_OF_WEEK);
if(weekday==firstDayOfWeek)System.out.println();
}
while(d.get(Calendar.MONTH)==month);
if(weekday!=firstDayOfWeek)System.out.println();
}

}


其中主要就以下代码,哪位大侠解释一下:
1,int firstDayOfWeek=d.getFirstDayOfWeek();
int indent=0;
while(weekday!=firstDayOfWeek){
indent++;
d.add(Calendar.DAY_OF_MONTH,-1);
weekday=d.get(Calendar.DAY_OF_WEEK);
}
就是不太明白d.add(Calendar.DAY_OF_MONTH,-1);具体什么意思,为什么-1呢?

2,String[] weekdayNames=new DateFormatSymbols().getShortWeekdays();
do{
System.out.printf("%4s",weekdayNames[weekday]);
d.add(Calendar.DAY_OF_MONTH, 1);
weekday=d.get(Calendar.DAY_OF_WEEK);
}
while(weekday!=firstDayOfWeek);
System.out.println();
其实还是add()方法问题,看了api后还是有点疑惑,到底是哪里增加或减少,减少的是什么呢?整个循环

看到底都是问号,哪位大侠解释解释啊?
...全文
96 4 打赏 收藏 转发到动态 举报
写回复
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
tg008007x3 2010-03-12
  • 打赏
  • 举报
回复
顶楼上的!
cwjieNo1 2010-03-12
  • 打赏
  • 举报
回复
add()方法问题,主要看里面的参数啊,里面的参数为正,就是加啊,参数为负,当然是减
Dazzlingwinter 2010-03-12
  • 打赏
  • 举报
回复
月份是从0-11的
huajia136651 2010-03-12
  • 打赏
  • 举报
回复
1.d.add(Calendar.DAY_OF_MONTH,-1)这是因为本月的第一天不一定是周日,所以程序的第一部分处理是要查看出第一天距离上一个周日需要多久的空格,他-1其实是让GregorianCalendar d回到了上个月的对应的日子了,直到遇见上个月的周日。
2.第二个add其实是在不断的增加日子来输出而已

你应该先明白这个程序是要干嘛的,他不过是想象电脑一样的输出这个月的日历表而已,最好的方法就是自己debug一下,然后再看看API的说明文档,就可以了。我也是新手,也是看着这个努力学习Java呢。呵呵!
相关推荐

62,567

社区成员

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