一个Demo中:
     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);
     那么现在上面的语句又是设置这一天为第一天,这个我感觉有点迷糊,哪位可以解释一下啊?谢谢!!

解决方案 »

  1.   

    int today=d.get(Calendar.DAY_OF_MONTH);
    是获取由d确定的日期号;
    d.set(Calendar.DAY_OF_MONTH,1);
    则是将d对应的日期号设为1。
    不觉得有什么不妥啊。
      

  2.   

    public void set(int field,
                    int value)将给定的日历字段设置为给定值。不管处于何种宽松性模式下,该值都不由此方法进行解释。 参数:
    field - 给定的日历字段。
    value - 给定日历字段所要设置的值。这里就是将Calendar.DAY_OF_MONTH设置为1,然后去取该月Calendar.DATE的是一个星期中的星期几。
      

  3.   

    具体代码如下:
    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后还是有点疑惑,到底是哪里增加或减少,减少的是什么呢?整个循环看到底都是问号,哪位大侠解释解释啊?