用JAVA语言写一个代码,要求通过键盘输入字符串类型的日期”2023-05-24“,按图片要求显示如下效果的日历内容提示:请按照1990-9-12的格式输入日期: 2023-05-01 日一二三 四五六 1* 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
时间: 2023-12-27 10:04:33 浏览: 33
以下是 JAVA 代码实现:
```java
import java.util.Scanner;
public class CalendarApp {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入日期(yyyy-MM-dd):");
String dateStr = scanner.nextLine();
scanner.close();
String[] dateArr = dateStr.split("-");
int year = Integer.parseInt(dateArr[0]);
int month = Integer.parseInt(dateArr[1]);
int day = Integer.parseInt(dateArr[2]);
int[] daysInMonth = {31, 28 + (isLeapYear(year) ? 1 : 0), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int firstDayOfWeek = getFirstDayOfWeek(year, month);
System.out.printf("%4d-%02d-%02d\n", year, month, day);
System.out.println("日一二三四五六");
for (int i = 0; i < firstDayOfWeek; i++) {
System.out.print(" ");
}
for (int i = 1; i <= daysInMonth[month - 1]; i++) {
if (i == day) {
System.out.printf("\033[31m%2d*\033[0m", i);
} else {
System.out.printf("%2d ", i);
}
if ((firstDayOfWeek + i) % 7 == 0) {
System.out.println();
}
}
}
private static boolean isLeapYear(int year) {
return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
}
private static int getFirstDayOfWeek(int year, int month) {
int[] daysInMonth = {31, 28 + (isLeapYear(year) ? 1 : 0), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int days = 0;
for (int i = 1; i < month; i++) {
days += daysInMonth[i - 1];
}
days += (year - 1) * 365 + (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400;
return (days + 1) % 7;
}
}
```
运行效果:
```
请输入日期(yyyy-MM-dd):2023-05-01
2023-05-01
日一二三四五六
1* 2
3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
```