Java 使用Calendar或Date类,打印出当前月的日历表(新手小白,初次发表)

使用Calendar或Date类,打印出当前月的日历表:

提示:

  1. 先使用Date或Calendar获得这个月的1号是星期几,用来确定1号前需要几个**
  2. 然后确定这个月的天数,确定需要打印多少个数

                    a) 可以使用条件判断获得天数

                    b) 可以借用Calendar类的add方法,时间定为到X年X月的1号,先添加一个月,再减去一天,则时间就定为到X年X月的最后一天,获得这一天是几号则可得这个月的天数。

  3. 每输出7个内容(包含数字与空格)则需要换行。
  4. 输入年,月实现输出该月的日历
public static void main(String[] args) throws ParseException {
		
		Calendar cal = Calendar.getInstance();
		System.out.println("\t\t\t 本月");
		System.out.print("\t\t   "+cal.get(Calendar.YEAR)+"年\t");
		System.out.println((cal.get(Calendar.MONTH)+1)+"月");
		cal.set(Calendar.DATE, 1);//将本月日期修改为 MM月1日
		Date date1 = cal.getTime();//通过getTime()改为Date类型
		/*a是获取date1的星期几
		*因为下面操作可能会对date3有影响所以在这里传值
		*getDay()返回值是int类型
		*星期日返回值是0,星期一返回值是1,以此类推*/
		int a = date1.getDate();
		cal.add(Calendar.MONTH, 1);//将月份+1,日期变为(MM+1)月1日
		cal.set(Calendar.DATE, 0);//此时日期为MM月最后一天
		Date date2 = cal.getTime();//当此时的时间改为Date类型,以便后面的show1方法调用
		int b = show1(date1,date2);//b是本月的天数
		show2(a,b);
		
		Scanner scan= new Scanner(System.in);
		System.out.println("请输入年-月(yyyy-MM)");
		String str1 = scan.next();
		SimpleDateFormat sim = new SimpleDateFormat("yyyy-MM");
		Date date3 = sim.parse(str1);
		int c = date3.getDay();
		cal.set(Calendar.MONTH,(date3.getMonth()+1));		
		cal.set(Calendar.DATE,0);
		Date date4 = cal.getTime();
		int d = show1(date3,date4);
		show2(c,d);
		
	}
	public static int show1(Date date1,Date date2) {
		int a = date2.getDate()-date1.getDate()+1;//求本月时间因为是  最后一天-第一天,所以要+1
		return a;
	}
	public static void show2(int a,int b) {
		int date = 0;
		int sum = 0;
		System.out.println("星期日\t星期一\t星期二\t星期三\t星期四\t星期五\t星期六");
		/*本月第一天是星期几
		 * 前面用 * 号代替
		 * 如果是星期日 a=0
		 * 星期一 a=1
		 * 以此类推
		 * sum代表 * 号输出的个数
		 */
		for(int k = 0; k<a;k++) {
			System.out.print(" *\t");
			sum++;
		}
		/*这里的b为本月的天数
		 * Math.ceil(b/7))+1为输出后的行
		 */
		for (int i = 1; i <= ((int)(Math.ceil(b/7))+1); i++) {
			/* 中间变量sum的作用:通过以下判断是否为第一行
		 		*不是:sum=0,7-sum=0,每行输出7个日期
		 		*是:没输出一个 * 号 sum+1 7-sum 表示第一行输出日期的个数	 
		 	*/
			if(i!=1) {
				sum=0;
			}
			for (int j = 1; j <=(7-sum); j++) {
				if(date<b) {//date小于本月天数 date+1
					date++;
					if(date<10) {//因为 1与10 不同,1有一个数字 10有1和0两个数字,这里判断的目的是让 1与10中的0对齐
						System.out.print(" "+date+"\t");
					}else {
						System.out.print(date+"\t");						
					}
				}else {//最后一行不满足7个日期时 多出来的几天输出 * 号
					System.out.print(" *"+"\t");
					
				}
			}
			System.out.println();//目的是换行
		}
	}
}

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值