java实现简单万年历

思路:

1、算出当前月份的第一天与1900/1/1 的天数之差 day 

2、将day%7得到当前月的第一天是星期几

3、循环打印日历

代码实现:

import java.util.Calendar;
import java.util.Scanner;

public class Test {
	
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		//1.万年历
		//实例化两个日历对象,一个设置为1900/1/1 一个设置为你要查询的日期
		Calendar calendar1 = Calendar.getInstance();
		Calendar calendar2 = Calendar.getInstance();
		//年、月
		int year,month;
		System.out.print("请输入年、月:");
		year = input.nextInt();
		month = input.nextInt();
		//分别设置两个日历的年份和月份
		calendar1.set(year,month,1);
		calendar2.set(1900,1,1);
		//月份从0开始,所以要得到实际月份就需要月份-1
		calendar1.set(Calendar.MONTH,month-1);
		int day = getDaysBetween(calendar1,calendar2);
		//将天数差%7得到当前月份第一天是星期几
		day %= 7;
		System.out.println("一\t二\t三\t四\t五\t六\t日");
		//如果day%7==0,表示当前月份第一天是星期日
		if(day == 0)
			day=7;
		//输出day-1个\t
		for(int i = 1; i < day; i++){
			System.out.print("\t");
		}
									//getActualMaximum 获得该月份中天数的最大值
		for(int i = 1; i <= calendar1.getActualMaximum(Calendar.DAY_OF_MONTH); i++){
			System.out.print(i + "\t");
			if((i+day-1)%7 == 0)		//当 (i+day-1)%7 == 0 时,表示当天为星期日,需要换行
				System.out.println();
		}
    }
	/**
	 * 获得两个日期间天数差
	 * @param day1	日期1   用户查询日期
	 * @param day2	日期2 1900/1/1
	 * @return 天数差
	 */
	public static int getDaysBetween(Calendar day1,Calendar day2){
		//得到当前月份的第一天在一年中的天数
		int days = day1.get(Calendar.DAY_OF_YEAR);
		//获得用户输入的年份
		int y1 = day1.get(Calendar.YEAR);
		//计算1900/1/1日 与 y1/1/1日的天数差
		if(day2.get(Calendar.YEAR) != y1){
			day2 = (Calendar)day2.clone();
			do{
				days += day2.getActualMaximum(Calendar.DAY_OF_YEAR);
				day2.add(Calendar.YEAR, 1);
			}while(day2.get(Calendar.YEAR) != y1);
		}
		return days;
	}
}

结果:

猜你喜欢

转载自blog.csdn.net/qq_37618797/article/details/81087761