利用Calendar类编写一个万年历程序

Calendar万年历,制作指定年份的日历

1、Java中Calendar类是抽象基类,在创建对象的时候不能直接用new进行调用创建

//使用子类GregorianCalendar
Calendar cal = new GregorianCalendar();
//第二种
Calendar cal = Calendar.getInstance();

2、Calendar类中可以使用get方法来获得对应的年份、月份、日期等信息,但是有比较特殊的是获得月份以及获得星期数。

//new一个对象,自动获取当前系统时间:当前为2020年4月4日,星期六
Calendar calendar = new GregorianCalendar();
//calendar类中的get方法:1月返回0,2月返回1,…,12月返回11
int month = calendar.get(calendar.MONTH);
System.out.println(month);//当前为4月,因此返回3
//calendar类中的get方法,DAY_OF_WEEK:星期日返回1,星期一返回2,…,星期六返回7
int weekDays = calendar.get(calendar.DAY_OF_WEEK);
System.out.println(weekDays);//当前为星期六因此返回7

因此在输出月份以及星期数时,要进行相对应的加减1运算

3、打印日历时,一般在星期六时需要换行(假设每一行的开头为星期天时),判断条件为利用get方法返回的DAY_OF_WEEK是否等于7。如果等于7,则换行,因此每打印一个日期数后日期数应当加1。

//判断是否换行
if(calendar.get(Calendar.DAY_OF_WEEK)==7)
	System.out.println();

利用add方法可以实现使得日期数加一,需要注意的时,如果达到临界值时仍然加1,则会使得日期数为1,此时月份也加1。如此时MONTH=0 且DAY_OF_MONTH=31,如果仍然利用add方法进行加一,则MONTH=1且DAY_OF_MONTH=1。

//new一个对象,使得日期为2020-01-31
Calendar calendar = new GregorianCalendar(2020, 0, 31);
System.out.println("当前月份为:"+(calendar.get(calendar.MONTH)+1));
System.out.println("当前日期为:"+calendar.get(calendar.DAY_OF_MONTH));
calendar.add(calendar.DAY_OF_MONTH, 1);//使用add方法,让日期加一
System.out.println("日期加1后的月份为:"+(calendar.get(calendar.MONTH)+1));
System.out.println("日期加1后的日期为:"+calendar.get(calendar.DAY_OF_MONTH));

4、完整万年历代码

public class perpetualCalendar {
     

	public static void main(String[] args) {
     
		Scanner scan = new Scanner(System.in);
		System.out.println("请输入年份:");
		int year = scan.nextInt();// 输入要打印年历的年份
		Calendar calendar = Calendar.getInstance();// 创建对象
		calendar.set(Calendar.YEAR, year);// 设置年份为输入的年份
		calendar.set(Calendar.MONTH, 0);// 设置月份为1月
		calendar.set(Calendar.DAY_OF_MONTH, 1);// 设置为每个月的第一天

		String[] month = {
      "January", "February", "March", "April", "May",
				"June", "July", "August", "September", "October", "November",
				"December" };

		for (int i = 0; i <= 11; i++) {
     
			// 调用monthDays方法获得每个月对应的天数,也可以使用calendar.getActualMaximum()获取月份天数
			int days = monthDays(i, year);
			System.out.println("Calendar for year/month:" + year + "/"
					+ month[i] + "(" + year + "/"
					+ (calendar.get(Calendar.MONTH) + 1) + "月)");
			System.out
					.println("==================================================");
			System.out.println("日\t一\t二\t三\t四\t五\t六");

			for (int j = 0; j < calendar.get(Calendar.DAY_OF_WEEK) - 1; j++) {
     // 将1号与正确的星期对齐
				System.out.print("\t");
			}// for(对齐)

			for (int j = 0; j < days; j++) {
     
				if (calendar.get(Calendar.DAY_OF_MONTH) < 10)
					System.out.print(" ");
				System.out.print(calendar.get(Calendar.DAY_OF_MONTH) + "\t");
				if (calendar.get(Calendar.DAY_OF_WEEK) == 7)//判断是否换行
					System.out.println();
				calendar.add(Calendar.DAY_OF_MONTH, 1);
			}// for(输出日期)
			System.out.println("\n");
		}// for
	}// main
	public static int monthDays(int i,int year){
     //返回对应的天数
		switch (i) {
     
		case 1:
			if((year%4==0&&year%100!=0)||year%400==0)//判断是否为闰年
				return 29;
			else return 28;
		case 3:
		case 5:
		case 8:
		case 10:
			return 30;
		default://大月
			return 31;
		}//switch
	}//monthDays
}

你可能感兴趣的:(java)