用Java编写本月的日历,并表明本天

来源:互联网 发布:包包淘宝宝贝卖点范文 编辑:程序博客网 时间:2024/05/14 23:44
package 项目2;


import java.text.DateFormatSymbols;
import java.util.*;
public class CalendarTest {
     public static void main(String args[])
     {                                              //如果想看到不同地区程序的输出,应该在main方法的第一行添加下列代码
                                                 
    //construct d as current date
    GregorianCalendar d=new GregorianCalendar();//构造一个日历对象,并用当前的日期和时间进行初始化
     
    int today=d.get(Calendar.DAY_OF_MONTH);
    int month=d.get(Calendar.MONTH);
     
    //set d to start date of the month,将d设置为这个月的第一天,并得到这一天为星期几
    d.set(Calendar.DAY_OF_MONTH,1);
    int weekday=d.get(Calendar.DAY_OF_WEEK);
     
    //get first day of week (Sunday in the U.S)
    int firstDayOfWeek=d.getFirstDayOfWeek();     //firstDayOfWeek 代表的是当地一个星期的第一天是星期几,这里我们是星期日
     
    //determine the required indentation for the first line
    int indent=0;                                 //indent是为了计数,日历首行应该缩进几位
    while(weekday!=firstDayOfWeek)
    {
    indent++;
    d.add(Calendar.DAY_OF_MONTH,-1);      //将 d 设为上一天,那么对应的weekday的星期也就减一
    weekday=d.get(Calendar.DAY_OF_WEEK);   
    }
     
    //print weekday names                               //开始输出表示星期几名称的头
    String[] weekdayNames=new DateFormatSymbols().getShortWeekdays();
    do                                                //因为 do 。。。 while 是先做一次循环,循环开始是weekday与firstDayOfWeek是相同的  
    {                                                  
    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++)            //根据indent,打印首行缩进的空格
    System.out.print(" ");
                                           //开始输出日历内容
    d.set(Calendar.DAY_OF_MONTH,1);       //在循环中用d记录一个月中的每一天,首先先设为月份的第一天
    do
    {
    //print day
    int day=d.get(Calendar.DAY_OF_MONTH);//定义一个int变量day进行每一天的输出
    System.out.printf("%3d",day);
  
    //mark current day with'*'
    if(day==today)System.out.print("*");//判断是否是今天,如果是,则用*标记
    else System.out.print(" ");
     
    //advance d to the next day
    d.add(Calendar.DAY_OF_MONTH,1);//将d设为下一天
    weekday=d.get(Calendar.DAY_OF_WEEK);//weekday记录这一天的星期数
     
    //start a new line at the start of the week
    if(weekday==firstDayOfWeek)     //如果已经输出七天,则换行输出下一星期
    System.out.println();
    }while(d.get(Calendar.MONTH)==month);   //一旦d进入下一月,程序结束
    //the loop exits when d is day 1 of the next month
     
    //print final end of line if necessary
    if(weekday!=firstDayOfWeek)
    System.out.println();
     }
}

0 0