Java 打印某年的台历;

本文介绍了一个用Java编写的日历程序,能够计算指定年份每个月的具体日期,并展示出该月份每一天对应的星期。程序包含了判断闰年、计算某年总天数、确定每月天数等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 

package wannianli;

public class demo2 {
	/*
	 * 已知2000-1-1星期六
	 * 求某年的挂历
	 * 解题思路:
	 * 1,判断某年是否为闰年
	 * 2,某年某月有多少天
	 * 3,某年有多少天
	 * 4,某年某月当月第一天是星期几
	 * 5,某年某月到2000年1月1日有多少天
	 * 6,
	 * */
	static boolean isyear(int year){
		boolean isk=false;
		isk=year%4==0&&year%100!=0||year%400==0 ? true:false;
		return isk;	
	}
	//某年的总天数
	static int yearzongdays(int year){
		int yearzong=0;
		yearzong=isyear(year) ? 366:365;
		return yearzong;
		
	}
	//某年每月是多少天
	static int yearmonthdays(int year,int month){
		int ym=0;
		switch (month) {
			case 1:case 3:case 5:case 7:case 8:case 10:case 12:
				ym=31;	
				break;
			case 4:case 6:case 9:case 11:
				ym=30;
				break;
			case 2:
				ym=isyear(year) ? 29:28;
				break;

			default:
				ym=0;
				break;
		}
		
		return ym;
	}
	//从某年开始距2000—01-01多少天
	static int to20000101days (int year,int month){
		int days=0;
		if (year>=2000){
			for(int y=2000;y<year;y++){
				days=days+yearzongdays(y);	
			}
			for(int m=1;m<13;m++){
				days=days+yearmonthdays(year, m);
				
			}
		}else {
			for(int y=year+1;y<2000;y++){
				days=days+yearzongdays(y);
			}
			for(int m=1;m<13;m++){
				days=days+yearmonthdays(year, m);
			}
		}
		
		return days;
		
	}
	//某年某月一号是星期几
    /*
	 *  5.某年某月的1号星期几
	 *  0123456
	 *  日一二三四五六
	 *   a.2003-5-1
	 *     (6+n)%7   推导出来的判断第一天是周几的公式如果大于2000年使用第一中反之
	 *   b.1997-5-1
	 *     6-n%7
	 */
	static int weekdays(int year,int month){
		int weekdays=0;
		int n=to20000101days(year, month);
		if (year>=2000) {
			weekdays=(6+n)%7;
		}else {
			weekdays=6-n%7;
		}
		return weekdays;
	}
	//打印
	static void display(int year,int month){
		System.out.println("----"+year+"年"+month+"-----");
		System.out.println("日\t一\t二\t三\t四\t五\t六\t周");
		int days=yearmonthdays(year, month);
		int week=weekdays(year, month);
		int count =0;
		for(int i = 0;i<week;i++){
			System.out.print("\t");
			count++;
		}
		for(int x=1;x<=days;x++){
			System.out.print(x+"\t");
			count++;
			if (count%7==0) {
				System.out.println();
			}
		}
		
	}
	//打印某年的日历
	static void quandisplay(int year){
		for(int m=1;m<13;m++){
			display(year, m);
			System.out.println();
		}
		
	}
	
	

	public static void main(String[] args) {
		// TODO Auto-generated method stub
			quandisplay(2018);
	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值