使用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();
}
}
}
}
效果如下图: