java學習筆記--輸出本月日曆

xiaopengyaonixi發表於2016-10-11

摘自java核心技術卷I,輸出本月的日曆,程式碼如下:

package com.handkoo.test;

import java.text.DateFormatSymbols;
import java.util.Calendar;
import java.util.GregorianCalendar;

public class CanendarDemo {

	public static void main(String[] args) {
			
		/*			初始化物件和資料			*/
		// 構造一個日曆物件
		GregorianCalendar d = new GregorianCalendar();
		// 獲取到當前時間的日和月
		int today = d.get(Calendar.DAY_OF_MONTH);
		int month = d.get(Calendar.MONTH);
		
		
		/*			獲取本月第一天為周幾,同時獲取一週的開始為周幾		*/
		// 設定日曆為當前月的第一天
		d.set(Calendar.DAY_OF_MONTH,1);
		// 獲取當前月第一天為這個星期的第幾周
		int weekday = d.get(Calendar.DAY_OF_WEEK);
		// 獲取星期的起始日
		int firstDayOfWeek = d.getFirstDayOfWeek();
		
		
		/*			確定要縮排的空格數			*/
		// 確定列印需要縮排的距離,從當前的周挪到起始周,用indet來計數
		int indent = 0;
		while(weekday!=firstDayOfWeek){
			indent++;
			d.add(Calendar.DAY_OF_MONTH, -1);
			weekday = d.get(Calendar.DAY_OF_WEEK);
		}
		
		/*			列印出周的標題				*/
		// 獲取到所有周的名稱,並列印輸出第一行
		String[] weekdayNames = new DateFormatSymbols().getShortWeekdays();
		// 當前的weekday表示每週的第一天,使用do迴圈,在執行中如果為第一週,則表示一週的迴圈結束
		do {
			// 格式化列印輸出
			System.out.printf("%4s",weekdayNames[weekday]);
			// 天數加1
			d.add(Calendar.DAY_OF_MONTH, 1);
			// 獲取週數
			weekday = d.get(Calendar.DAY_OF_WEEK);
		} while (weekday!=firstDayOfWeek);
		// 換行
		System.out.println();
		
		
		/*			列印縮排的部分				*/
		// 接著準備輸出日期,在輸出日期日期前需要輸出空格,index表示需要縮排的空格數
		for(int i = 1;i<=indent;i++){
			System.out.print("    ");
		}
		
		
		/*			列印出日期,如果為下一週就換行			*/
		// 將d設定為本月的第一天
		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(" ");
			}
			// 增加天數,迴圈
			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();
		}
	}

}


相關文章