java小程序(万年历)

这里万年历用两种方法写;

第一种:简单写法,就是用基本语句来写。

public class Test2 {

	 public static void main(String[] args){
			//思路:
			//1、构建Scanner扫描器类的对象
			Scanner input = new Scanner(System.in);

			//2、从控制台接收用户录入的年份、月份
			System.out.println("输入年");
			int year  = input.nextInt();
			System.out.println("输入月");
			int month  = input.nextInt();

			//3、获得1900年距离当前年份上一年的总天数
			int totalDays = getFromNowYearTo1900TotalDays(year);

			//4、获得当前年份所经过的天数
			int totalDaysThisYear = getNowYearPassedTotalDays(year,month);

			//5、求得给定月份第一天的星期数
			int week = (totalDays + totalDaysThisYear +1) % 7;//星期日是,week = 0

			//6、格式化输出日历
			formatCalendarOutput(week,year,month);
		}

		/**
		*格式化输出日历
		*@param week:当前月份第一天的星期数
		*@param year:当前年份
		*@param month:当前月份
		*/
		public static void formatCalendarOutput(int week,int year,int month){
			int cnt = 0;//计数器,记录空白数和日期数的和
			//1) 打印表头
			System.out.println("星期日\t\t星期一\t\t星期二\t\t星期三\t\t星期四\t\t星期五\t\t星期六");
			//2)打印空白(观察星期与之前空个数之间的规律)
			for(int i=1;i<= week;i++){
				System.out.print("\t\t");
				cnt++;
			}
			//3) 打印日历
			for(int i=1;i<=getNowMonthDays(year,month);i++){
				System.out.print(i+"\t\t");
				cnt++;
				//若记录空白数和日期数的和是七的倍数,应该换行输出
				if(cnt % 7 == 0){
					System.out.println();
				}
			}	
		}


		/**
		*判断给定的年份是否为闰年
		*@param year:给定的年份
		*@return true:闰年;false:平年
		*/
		public static boolean isLeapYear(int year){
			return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);	
		}

		/**
		*根据参数指定的年份,月份,求出当前月的总天数
		*@param year:年份
		*@param month:月份
		*@return 月的总天数
		*/
		public static int getNowMonthDays(int year,int month){//year:设计该参数的原因,2月份根据年份是否是闰年来确定其天数的
			switch(month){
				case 2:
					return isLeapYear(year) ? 29 : 28;
				case 4:
				case 6:
				case 9:
				case 11:
					return 30;
				default:
					return 31;
			}
		}

		/**
		*获得当前年份的上一年距离1900年所经过的总天数
		*@param year 当前年份
		*@return 总天数
		*/
		public static int getFromNowYearTo1900TotalDays(int year){
			int totalDays = 0;
			for(int i = 1900; i< year; i++){//i:年份
				totalDays += isLeapYear(i) ? 366 : 365;
			}
			return totalDays;
		}

		/**
		*求出当前年份经过的总天数(从当前年的1月1日到给定月份的上一个月最末一天)
		*@param year:年份
		*@param month:月份
		*@return 总天数
		*/
		public static int getNowYearPassedTotalDays(int year,int month){
			int totalDays = 0;
			for(int i=1;i< month;i++){//i:月份
				totalDays += getNowMonthDays(year,i);
			}
			return totalDays;
		}
		   
	  
}
第二种:利用Calendar类来编写。

public static void dateTime() {
		Scanner scanner = new Scanner(System.in);
		System.out.println("输入年");
		int year = scanner.nextInt(); // 获取年份
		System.out.println("输入月");
		int month = scanner.nextInt(); // 获取月份
		// 创建calendar对象
		Calendar calendar = Calendar.getInstance();
		calendar.set(year, month - 1, 1);
		// 获取第一天的星期
		int firtDay = calendar.get(Calendar.DAY_OF_WEEK);
		// System.out.println(calendar.get(Calendar.DAY_OF_WEEK));
		// 将月份设置改为输入月份的上个月
		calendar.set(year, month, 1);
		// 将天数减一,就到了输入月份的最后一天
		calendar.add(calendar.DAY_OF_MONTH, -1);
		// System.out.println(calendar.get(Calendar.DAY_OF_MONTH));
		// 获取这个月的总天数
		int days = calendar.get(Calendar.DAY_OF_MONTH);

		System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六\t");
		//输入日期
		int count = 0;
		for(int i = 0; i < firtDay-1; i++){
			System.out.print("\t");
			count++;
		}
		for(int i = 1; i <days; i++){
			if (i < 10) {
				System.out.print( " "+i + "\t");
			} else {
				System.out.print( i + "\t");
			}
			count++;
			if(count % 7 == 0)
				System.out.println();
		}

	}



  • 11
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值