來自《java核心技術卷一》
/** * Created by wangbin10 on 2019/1/3. * 打印當月日歷 */ public class CalendarTest { public static void main(String[] args) { GregorianCalendar d = new GregorianCalendar(); /** * 獲取當前日期的月份和日子 * 月份是0~11 */ int today = d.get(Calendar.DAY_OF_MONTH); int month = d.get(Calendar.MONTH); /** * 將d設置為當前月份的第一天 * 並獲取這一天是一周中的第幾天,一周的第一天 */ d.set(Calendar.DAY_OF_MONTH, 1); int weekDay = d.get(Calendar.DAY_OF_WEEK); int firstDayOfWeek = d.getFirstDayOfWeek(); int intent = 0; while (weekDay != firstDayOfWeek) { intent++; //日子減一,一直減到當日是一周的第一天,得到縮進 d.add(Calendar.DAY_OF_MONTH, -1); weekDay = d.get(Calendar.DAY_OF_WEEK); } /** * 獲取表頭——日期縮寫 */ String[] weekdays = new DateFormatSymbols().getShortWeekdays(); do { System.out.printf("%4s", weekdays[weekDay]); d.add(Calendar.DAY_OF_MONTH, 1); weekDay = d.get(Calendar.DAY_OF_WEEK); } while (weekDay != firstDayOfWeek); System.out.println(); /** * 打印1號之前的空白 */ for (int i = 1; i < intent; i++) { System.out.print(" "); } d.set(Calendar.DAY_OF_MONTH, 1); /** * 只要不出當月,則繼續打印 */ do { int day = d.get(Calendar.DAY_OF_MONTH); System.out.printf("%3d", day); if (day == today) { System.out.print("* "); } else { System.out.print(" "); } /** * 日期增加1天后,如果是周一,則進行換行 */ d.add(Calendar.DAY_OF_MONTH, 1); weekDay = d.get(Calendar.DAY_OF_WEEK); if (weekDay == firstDayOfWeek) { System.out.println(); } } while (d.get(Calendar.MONTH) == month); if (weekDay != firstDayOfWeek) { System.out.println(); } } }