写了个答案可以参考下,但是不建议这样问问题,可以具体说明你是哪里不清楚怎么写package com.kr.yu_c;
import java.util.Scanner;
import java.util.TimeZone;
/**
* 控制台万年历 根据输入的年月,输出当月日历
*
* @author july
*/
public class Calendar {
public static void main(String[] args) {
/**
* 第一步:从控制台获得输入的年月
*/
Scanner sc = new Scanner(System.in);
while (true) {
// System.out.println("请输入年份 (输入exit退出程序)");
System.out.println("输入1查看上个月日历\n" +
"\n" +
"输入2查看下个月日历\n" +
"\n" +
"输入3查看去年本月日历\n" +
"\n" +
"输入4查看明年本月日历\n" +
"\n" +
"输入5查看指定月份日历");
int select = Integer.parseInt(sc.next());
// //获取东八区时间
java.util.Calendar c = java.util.Calendar.getInstance(TimeZone.getTimeZone("GMT+08:00"));
//获取年
int year = c.get(java.util.Calendar.YEAR);
//获取月份,0表示1月份
int month = c.get(java.util.Calendar.MONTH) + 1;
switch (select) {
case 1:
if (month == 1) {
month = 12;
year = year - 1;
}
break;
case 2:
if (month == 12) {
month = 1;
year = year + 1;
}
break;
case 3:
year = year - 1;
break;
case 4:
year = year + 1;
break;
case 5:
System.out.println("输入年份:");
year = Integer.parseInt(sc.next());
System.out.println("输入月份:");
month = Integer.parseInt(sc.next());
break;
}
printCal(year, month);
// if (!tempyear.equals("exit")) {
// //year强转成int使用
// int year=Integer.parseInt(tempyear);
// System.out.println("请输入月份");
// int month = sc.nextInt();
//
//
// }else {
// //输入了exit,退出系统
// System.out.println("退出系统");
// System.exit(0);
// }
}
}
private static void printCal(int year, int month) {
/**
* 第二步:判断是不是闰年
*/
boolean isleap = false;
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
isleap = true;
} else {
isleap = false;
}
/**
* 第三步:判断该月有多少天
*/
int monthDays = 0;
switch (month) {
// 大月份
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
monthDays = 31;
break;
// 小月份
case 4:
case 6:
case 9:
case 11:
monthDays = 30;
break;
// 2月份
default:
if (isleap) {
monthDays = 29;
} else {
monthDays = 28;
}
}
/**
* 第四步:判断该月距离1990年1月1日有多少天
* 1.按照年份差距计算天数
* 2.月份距离本年1月1日有多少天
* 3.两部分求和
*/
int yearCount = 0;
int monthCount = 0;
int sumCount = 0;
// 计算年份相差的天数
for (int i = 1990; i < year; i++) {
if ((i % 4 == 0 && i % 100 != 0) || (i % 400 == 0)) {
yearCount += 366;
} else {
yearCount += 365;
}
}
// 计算月份距离本年1月1日的天数
for (int i = 1; i < month; i++) {
switch (i) {
// 大月份
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
monthCount += 31;
break;
// 小月份
case 4:
case 6:
case 9:
case 11:
monthCount += 30;
break;
// 2月份
default:
if (isleap) {
monthCount += 29;
} else {
monthCount += 28;
}
}
}
// 两部分之和即相距天数
sumCount = yearCount + monthCount;
/**
* 第五步:计算当前月第一天是周几 已知1990年1月1日是周一,根据上一步计算的时间距离求
*/
int week = (sumCount % 7) + 1;
/**
* 第六步:打印当前月日历
*/
// 打印输入的年月信息
System.out.println("\t" + year + "年" + month + "月");
// 打印头部
System.out.println("星期日 星期一 星期二 星期三 星期四 星期五 星期六");
// 打印可能的空白
for (int i = 0; i < week; i++) {
System.out.print("\t");
}
// 打印日历
for (int i = 1; i <= monthDays; i++) {
System.out.print(i + "\t");
if ((i + week) % 7 == 0) {
System.out.println();
}
}
System.out.println();
}
}
|