使用CalendarAPI写java版万年历

使用CalendarAPI写java版万年历

在论坛里看了好多万年历的版本,然后发现大多都是用逻辑推算出来的日历,所以今天分享一个使用CalendarAPI写的Java版万年历,非常的简单,只要明白Calendar的使用方法就可以。

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;
/**
 * 
 * @author Renaaa
 *
 */
public class WanNianLi {
	public static void main(String[] args) throws Exception {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入年份:");
		int year = sc.nextInt();
		System.out.println("请输入月份:");
		int month = sc.nextInt();
		System.out.println("                     " + year + "年" + " " + month + "月");
		System.out.println("------------------------------------------------------");
		System.out.println("星期日" + "\t" + "星期一" + "\t" + "星期二" + "\t" + "星期三" + "\t" + "星期四" + "\t" + "星期五" + "\t" + "星期六");
		
		//换行
		//System.out.println();
		
		//定义time为year-month;
		String time = year + "-" + month;
		//格式化日期类型,要和自己定义的time的形式一样
		SimpleDateFormat format = new SimpleDateFormat("yyyy-M");
		//
		Date date = format.parse(time);
		//
		Calendar calendar = Calendar.getInstance();
		//
		calendar.setTime(date);
		
		//获取某年某月开始的第一天是周几
		int day = calendar.get(calendar.DAY_OF_WEEK);
		
		//获取每个月有多少天
		int month_of_day = calendar.getActualMaximum(calendar.DAY_OF_MONTH);
		
		/*
		 * 执行循环,打印出来的是六行七列,
		 * 假如该月的1号是从日历中的一周的最后一天(周六开始)
		 * 那么,循环的最大次数应该是6+31  即37次,因为i从0开始循环,所以i < 37停止 
		 */
		for (int i = 0; i < 37; i++) {
			//获取的day,假如获取的是2019年5月的day,则day为7,此值只有改变月份之后才会改变
			if (i < (day - 1)) {
				//因为i从0开始,所以执行判断,打印每月1号开始之前的空白
				//注意此处打印不换行
				System.out.print("\t");
			} else {
				
				//注意此处打印不换行,因为强迫症,想要让输出的日期和星期几对应的是居中状态,所以在数字前加了空格
				//此处可以先输入1,然后对照着日历,找出i和day之间的规律
				System.out.print("  " + (i - day + 2) + "\t");
				
				//此处减2,是因为i从0开始循环,所以确定循环停止的数要在(day - 1) + (month_of_day - 1),因为有小于31天的月份,所以要执行该判断
				if (i == (day + month_of_day -2)) {
					break;
				}
			}
			//判断一周为七天,如果为七天则换行
			if ((i + 1) % 7 == 0) {
				System.out.println();
			}
		}
	}
}

效果如下图:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值