直接上代碼
package com.csdn.soinice.util;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Scanner;
/**
* 根據指定日期獲取當月日曆
* <p>
* 輸出一份當前所在時區當前時間的一個月的日曆(1號到28/29/30/31號,以及每天對應爲星期幾)。
* 思路:
* (1)獲得這一年是否是閏年。閏年的2月只有28天,非閏年2月有29天。其他1、3、5、7、8、10、12月每月31天,2、4、6、9、11每月30天。
* (2)根據上一步獲得這個月的總天數。
* (3)獲得這個月第一天是星期幾。然後依次填充。直到這個月最後一天。
*
* @author imenger
* @date 2020/3/24 10:40 上午
*/
public class MyCalendar {
public static void main(String[] args) throws ParseException {
int maxDay = 0;
int firstDay = 0;
int currentDay = 0;
System.out.println("請輸入一個日期:格式爲:2020-02-02");
Scanner sc = new Scanner(System.in);
// 鍵盤輸入日期格式的字符串
String str = sc.nextLine();
DateFormat format = new SimpleDateFormat("yyyy-MM-dd");
// 將字符串轉化爲指定的日期格式
Date date = format.parse(str);
Calendar calendar = new GregorianCalendar();
// 將日期轉化爲日曆
calendar.setTime(date);
// 當前日期中當前月對應的最大天數
maxDay = calendar.getActualMaximum(Calendar.DATE);
// 當前日期中的當前天
currentDay = calendar.get(Calendar.DATE);
// 設置爲當前月的第一天
calendar.set(Calendar.DATE, 1);
// 當前日期中當前月第一天對應的星期數
firstDay = calendar.get(Calendar.DAY_OF_WEEK);
System.out.println("--------------------------------");
System.out.println("週日\t週一\t週二\t週三\t週四\t週五\t週六");
System.out.println("--------------------------------");
// 當前月第一天之前以空格輸出
for (int j = 1; j < firstDay; j++) {
System.out.print("\t");
}
// 輸出當月每一天的號數
for (int i = 1; i <= maxDay; i++) {
// 以*i表示當天日期
if (i == currentDay) {
System.out.print("*");
}
System.out.print(i + "\t");
// 以七天爲一個循環輸出所有天數
if ((i - (8 - firstDay)) % 7 == 0) {
System.out.println("\n");
}
}
}
}