import java.text.DateFormatSymbols;
import java.util.*;public class CalendarTest
{
public static void main(String[] args) 
{
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("%5s",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 = 1;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.   

    自己去下个java的api包,就什么都懂的了
      

  2.   

    哦,这个是JAVA核心技术上的例子吧,我刚开始看的时候也不太懂,按照他的思路写几遍也就明白了
    打印日历关键的就是看这个月的第一天是周几,这个月的天数,然后周六换行,这些可以通过GregorianCalendar 的对象很容易的获得,程序里的一些代码跟属性看名字也能把他们意思猜个差不多吧,看不懂的就要查帮助文档了
      

  3.   

    主要围绕Calendar展开的。
    有什么不懂这个直接查API就能明白。
    搞java的一定要学会查API。
      

  4.   

    说说哪里不懂啦这是在 JAVA核心技术里的一段代码
    不懂的话再看一遍,还不懂 再看一遍书。
      

  5.   

    这是我以前写的有自己的注释import java.util.*;
    class GregorianCalendarGetSet
    {
    public static void main(String[] args) 
    {
    /*
    GregorianCalendar now = new GregorianCalendar();
    int month = now.get(Calendar.MONTH);
    int weekday = now.get(Calendar.DAY_OF_WEEK);
    System.out.println("month:"+month+" weekday:"+weekday);//输出6,7
    Date hireDay = now.getTime();
    //System.out.println(hireDay);
    now.setTime(hireDay);
    int year = now.get(Calendar.YEAR);
    System.out.println(year);
    */ 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);//设置d为这个月的第一天
    int weekday = d.get(Calendar.DAY_OF_WEEK);//得到这个月的第一天是星期几 4 System.out.println("   日   一   二   三   四   五   六");
    for(int i=Calendar.SUNDAY;i<weekday;i++)//SUNDAY是 1 -- 1,2,3
    //根据得到这个月的第一天是星期几(weekday)在输出之前打印出相应个数的空格
    System.out.print("     ");
    do{
    int day = d.get(Calendar.DAY_OF_MONTH);//得到这个月的第一天代码22行
    System.out.printf("%4d",day);//1
    if(day == today){
    System.out.print("*");
    }else{ 
    System.out.print(" ");
    }
    if(weekday ==Calendar.SATURDAY){//当这一天等于星期六时 换行
    System.out.println();
    }
    d.add(Calendar.DAY_OF_MONTH,1);//将d设置下一天
    weekday = d.get(Calendar.DAY_OF_WEEK);//得到下一天是星期几

    }while(d.get(Calendar.MONTH)==month);//当是下一个月的时候结束。。
    }

    }
    /*
    weekday来控制换行,month控制程序结速,today判断是否加上*号
    day打印出 几号 
    add将d设置成下一天*/
      

  6.   

    int indent = 0;
    while(weekday != firstDayOfWeek)
    {

    indent++;

    d.add(Calendar.DAY_OF_MONTH,-1);
    weekday = d.get(Calendar.DAY_OF_WEEK);
    System.out.println(d.get(Calendar.DAY_OF_MONTH));
    System.out.println(weekday);

    }
    这里输出来的怎么是这样的
    30
    4
    29
    3
    28
    2
    27
    1
    这个我就有点不懂了
      

  7.   

    d.set(Calendar.DAY_OF_MONTH,1);已经设定成第一天了,所以你输出的30应该是上一个月的吧。
    应该输出的东西都是上一个月的。你仔细看看逻辑,不行的话每一个设定得值都输出,看和你理解的有什么区别。