我想要显示当月的日历的,可是一直不是我想要的格式,帮忙看看我的代码呀。谢谢
package cn.xiaoben;import java.util.*;public class CalendarTest { /**
 * @param args
 */
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);
System.out.println("Sun Mon Tue Wed Thu Fri Sat");
for(int i=Calendar.SUNDAY;i<weekday;i++)
System.out.print("    ");

do{
int day=d.get(Calendar.DAY_OF_MONTH);
System.out.printf("%3d", day);
if(day==today)
System.out.print("*");
else
System.out.print(" ");

if(weekday==Calendar.SATURDAY);
System.out.println();
d.add(Calendar.DAY_OF_MONTH, 1);
weekday=d.get(Calendar.DAY_OF_WEEK);
}
while(d.get(Calendar.MONTH)==month);

if(weekday!=Calendar.SUNDAY)
System.out.println();
}}

解决方案 »

  1.   

    代码不是我写的,但是帮你调整和测试过了,直接能用
    看看对你有没有帮助,我还没细看,祝好运!import java.util.GregorianCalendar;
    import java.util.Date;import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;public class Test2 {
        private String weekDay = null;
        private int dayNum = 0;    public static void main(String[] args) {
            boolean bYear = true;
            boolean bMonth = true;
            int year = 0;
            int month = 0;
            
            System.out.println( "请输入年份:" );
            year = new Test2().readIn( bYear );
            System.out.println( "请输入月份:" );
            month = new Test2().readIn( bMonth );
            System.out.println( year + "--" + month );
        
            new Test2().weeklyOutput( year, month );    
        }
        
        /**
        * 从键盘读入字符串转成int型
        * 
        * @param b
        * @return
        */
        public int readIn( boolean b ) {
            String str = null;
            int num = 0;
            BufferedReader br = new BufferedReader(
                    new InputStreamReader( System.in ) );
            
            try {
                //当b=true时,把从键盘输入的字符串试图转换为int,输入不为数字则重新输入
                while( b ) {
                    str = br.readLine();
                    for( int i = 0; i < str.length(); i++ ){
                        char strChar = str.charAt(i);
                        if( !( strChar >= 48 && strChar <= 57 ) ){
                            System.out.println( "非法格式!请输入数字格式:" );
                            b = true;
                            break;//**注意用break跳出for循环(不能用return,那就终止了)
                        }
                        else{
                            b = false;
                        }
                    }
                }        
                num = Integer.parseInt( str );        
            } catch (IOException e) {
                e.printStackTrace();
            }    
            
            return num;
        }        
        /**
        * 根据2007年5月1日是周2推算星期
        * 
        * @param year
        * @param month
        * @param day
        * @return
        */
        public String myWeekday(int year, int month, int day) {
            GregorianCalendar timeStart = new GregorianCalendar(2007, 4, 1 );
            GregorianCalendar timeEnd = new GregorianCalendar(year, (month - 1), day );
            Date sTimeDate = timeStart.getTime();
            Date eTimeDate = timeEnd.getTime();
            //System.out.println(eTimeDate + "-" + sTimeDate);
            
            long sTimeLong = sTimeDate.getTime();
            long eTimeLong = eTimeDate.getTime();
            long diffLong = eTimeLong - sTimeLong;
            long diffDay = diffLong / 1000 / 60 / 60 / 24;
            //System.out.println(diffDay);        switch ( (int) diffDay % 7 ) {
            case 0:
                weekDay = "2";
                break;
            case 1:
            case -6:
                weekDay = "3";
                break;
            case 2:
            case -5:
                weekDay = "4";
                break;
            case 3:
            case -4:
                weekDay = "5";
                break;
            case 4:
            case -3:
                weekDay = "6";
                break;
            case 5:
            case -2:
                weekDay = "7";
                break;
            case 6:
            case -1:
                weekDay = "1";
                break;
            }
            
            //System.out.println("weekDay is : " + weekDay);
            
            return weekDay;
        }    /**
        * 根据给出的年月份计算天数
        * 
        * @param year
        * @param month
        * @return
        */
        public int myMonthDays( int year, int month ) {
            //根据平闰年得到2月份天数
            int jan = 28;
            if( ( year % 4 == 0 && year % 100 != 0 ) || year % 400 == 0 ) {
                jan = 29;
            }
            
            //根据月份得到每个月的天数
            switch( month ) {
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                return dayNum = 31;
            case 4:
            case 9:
            case 6:
            case 11:
                return dayNum = 30;
            case 2:
                return dayNum = jan;
            default:
                System.out.println( "month must be between 1 and 12." );
                return dayNum = -1;
            }    
        }    /**
        * 打印日历
        * 
        * @param year
        * @param month
        */
        public void weeklyOutput( int year, int month ) {
            int wd = 0;
            String dayStr = null;
            
            System.out.println( "Sun Mon Tue Wed Thu Fri Sat" );//**注意:2位空格间隔
            
            //得到星期并根据1号所在的星期打印空格
            weekDay = this.myWeekday( year, month, 1 );
            wd = Integer.parseInt(weekDay);
            if( wd == 7 ){
                wd = 0;
            }
            for ( int i = 0; i < wd; i++ ) {
                System.out.print("    "); //**注意:4个空格 (包括2位数字和2位空格)        
            }
            
            //得到并打印天数, 每行占7位(包含1日前的空格)
            dayNum = this.myMonthDays( year, month );        
            for ( int i = 0; i < dayNum; i++ ) {
                dayStr = ( i + 1 ) + "  ";
                //**注意:为了能使数字对齐,1-9前加0
                if( i < 9 ){
                    dayStr = "0" + (i + 1) + "  ";
                }
                System.out.print( dayStr );
                if( ( i + 1 + wd ) % 7 == 0 ) {
                    System.out.println();
                }
            }        
        }
        
    }
    //注://测试得到结果:(月份+1)是真正的月份
    //public void test() {
    //    GregorianCalendar m = new GregorianCalendar(2007, 4, 31);// 5月31日
    //    Date md = m.getTime();
    //    System.out.println(md);
    //}//++++4种方法:
    // +readIn(boolean):int           把从键盘输入的字符串试图转换为int,输入不为数字则重新输入
    // +myWeekDay(year,month,day):String      根据2007年5月1日是周2推算出星期
    // +myMonthDays(year,month):int              由给出的年月份计算天数
    // +weeklyOutput(year,month):void              由给出的年月份打印日历
      

  2.   

    import java.util.*;public class CalendarTest { /**
     * @param args
     */
    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);
    System.out.println("Sun   Mon   Tue   Wed   Thu   Fri   Sat");
    do {
    int day = d.get(Calendar.DAY_OF_MONTH);
    System.out.printf("%3d", day);
    if (day == today)
    System.out.print("*  ");
    else
    System.out.print("   "); if (weekday == Calendar.SATURDAY)
    System.out.println();
    d.add(Calendar.DAY_OF_MONTH, 1);
    weekday = d.get(Calendar.DAY_OF_WEEK);
    } while (d.get(Calendar.MONTH) == month); if (weekday != Calendar.SUNDAY)
    System.out.println();
    }}
    格式基本符合要求,但你要调整第一个星期的对应关系
      

  3.   

    import   java.util.Calendar; 
    import   java.util.GregorianCalendar; 
    class   CalendarTest 
    {     public   static   void   main(String[]   args) 
        { 
            GregorianCalendar   a=new   GregorianCalendar(); 
            int   day=a.get(Calendar.DAY_OF_MONTH); 
            int   month=a.get(Calendar.MONTH); 
            a.set(Calendar.DAY_OF_MONTH,1); 
            int   weekday=a.get(Calendar.DAY_OF_WEEK);
            System.out.println("本月的日历:");
            System.out.println("日   一   二   三   四   五   六   "); 
            for(int   i=Calendar.SUNDAY;i <weekday;i++) 
            { 
                System.out.print("     ");
            } 
            do{ 
                int   today=a.get(Calendar.DAY_OF_MONTH); 
                System.out.printf("%2d",today);
            if(day==today) 
            { 
                System.out.print("*  ");
            } 
            else 
            { 
                System.out.print("   "); 
            } 
            if(a.get(Calendar.DAY_OF_WEEK)==7)
            { 
                System.out.println(); 
            } 
                a.add(Calendar.DAY_OF_MONTH,1); 
            }while(a.get(Calendar.MONTH)==month); 
            System.out.println();
        } 
    }