万年历
package time;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Scanner;
public class CalendarTest {
/*** 万年历 * 键盘输入年和月,输出这个月有多少天 */
public static void main(String[] args) throws ParseException {
Scanner key = new Scanner(System.in);
Calendar cal = new GregorianCalendar();
//打印日历的方法
showTime(cal);
while (true) {
//打印操作帮助信息
help();
//接收指令
int con = key.nextInt();
switch (con) {
case 1:
//打印上月的日历
preMonth(cal);
break;
case 2:
//打印下月的日历
nextMonth(cal);
break;
case 3:
//打印去年本月的日历
preYear(cal);
break;
case 4:
//打印明年本月的日历
nextYear(cal);
break;
case 5:
//打印指定年月的日历
checkYearMonth(key);
break;
default:
System.out.println("请正确输入选项!");
}
}
}
/*** 打印指定年月的日历*/
private static void checkYearMonth(Scanner key) throws ParseException {
System.out.println("请输入年月按此格式输入:(yyyy-MM)");
String str = key.next();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
Date date1 = sdf.parse(str);
System.out.println(date1);
Calendar cal = new GregorianCalendar();
cal.setTime(date1);
showTime(cal);
}
/*** 打印明年本月的日历 */
private static void nextYear(Calendar cal) {
cal.add(Calendar.YEAR, +1);
showTime(cal);
}
/*** 打印去年本月的日历 */
private static void preYear(Calendar cal) {
cal.add(Calendar.YEAR, -1);
showTime(cal);
}
/*** 打印下月的日历 * @param cal */
private static void nextMonth(Calendar cal) {
cal.add(Calendar.MONTH, +1);
showTime(cal);
}
/*** 打印上月的日历 */
private static void preMonth(Calendar cal) {
cal.add(Calendar.MONTH, -1);add()/roll():添加时间量
showTime(cal);
}
private static void help() {
System.out.println();
System.out.println("* * * * * * * * * * * * * *");
System.out.println("按1 查看上个月的日历");
System.out.println("按2 查看下个月的日历");
System.out.println("按3 查看去年本月的日历");
System.out.println("按4 查看明年本月的日历");
System.out.println("按5 查看指定年月的日历");
System.out.println("* * * * * * * * * * * * * *");
System.out.println("请输入指令:");
}
private static void showTime(Calendar cal) {
//获取这个月的总天数
int totalDays = cal.getActualMaximum(Calendar.DATE);
//设置日期为当月第一天
cal.set(Calendar.DAY_OF_MONTH, 1);
// 获取月份第一天是周几,周日是第一天
int week = cal.get(Calendar.DAY_OF_WEEK);
// System.out.println("1号周"+(week-1));
if (week == 1) {
week = 8;
}
System.out.println("---------" + cal.get(Calendar.YEAR) + "年" + (cal.get(Calendar.MONTH) + 1) + "月---------");
System.out.println("一\t二\t三\t四\t五\t六\t日");
int num = 0;
for (int i = 1; i < week - 1; i++) {
System.out.print(" \t");
num++;
}
for (int i = 1; i <= totalDays; i++) {
System.out.print(i + "\t");
num++;
if (num % 7 == 0) {
System.out.println();
}
}
System.out.println();
}
}
效果图