Java_某年某月的月历
2020年11月15日上午10:43
2020年11月21日下午9:56
这里学习使用Calendar日历类
要求
日期类。输入年份和月份,显示该月的月历(注:每周从星期一开始,不是星期日开始)
参考
代码
import java.util.Calendar;
import java.util.Scanner;
public class test4_1 {
public static void main(String[] args) {
System.out.print("请输入年月如:2020 02:");
Scanner scan = new Scanner(System.in);
int year = 2000, month = 01, max;
if (scan.hasNextInt()) {
year = scan.nextInt();
} else {
System.out.println("输入有误,程序退出");
System.exit(-1);
}
if (scan.hasNextInt()) {
month = scan.nextInt();
} else {
System.out.println("输入有误,程序退出");
System.exit(-1);
}
scan.close();
if (year > 9999 || month < 1 || month > 12) {
System.out.println("输入不合乎规范");
System.exit(-2);
} else {
Calendar calendar = Calendar.getInstance();
calendar.set(year, month - 1, 1);// 由于日历的月份从0开始,所以需要-1
max = calendar.get(Calendar.DAY_OF_MONTH);
int weak = (calendar.get(Calendar.DAY_OF_WEEK) + 5) % 7;
// 得到一号是周几,这里利用了循环1234567123...把原来周0为周日变成周7是周日
// 因为需要让每周从周一开始
if (month == 12) {
max = 31;
} else {
Calendar tmp = Calendar.getInstance();
tmp.set(year, month, 1);
tmp.add(Calendar.DAY_OF_MONTH, -1);
max = tmp.get(Calendar.DAY_OF_MONTH);
}
String[] a = new String[weak + max];
for (int i = 0, n = 1; i < weak + max; ++i) {
if (i < weak) {
a[i] = "";
} else {
a[i] = String.valueOf(n);
n++;
}
}
System.out.printf("%6s年%2s月", String.valueOf(year), String.valueOf(month));
System.out.printf("\n%3c%3c%3c%3c%3c%3c%3c\n", '一', '二', '三', '四', '五', '六', '日');
// unicode字符中,一个汉字是占用了2个字节,所以一个空格加一个汉字是3个字节宽度(右对齐)
for (int i = 0; i < a.length; ++i) {
if (i % 7 == 0 && i != 0) {
System.out.println();
}
System.out.printf("%4s", a[i]);
}
System.out.println();
}
}
}