1 import java.text.ParseException; 2 import java.text.SimpleDateFormat; 3 import java.util.Calendar; 4 import java.util.Date; 5 import java.util.GregorianCalendar; 6 import java.util.Scanner; 7 8 9 public class PrinTime { 10 11 /** 12 * @param args 13 */ 14 public static void main(String[] args) { 15 Scanner input = new Scanner(System.in); 16 17 String dateString = ""; //日期字符串 18 System.out.print("請輸入年份:"); 19 dateString += input.next(); 20 System.out.print("請輸入月份:"); 21 dateString += "-" + input.next(); 22 23 //創建日期格式對象,以便獲得Date類型的日期,構造函數參數是自定義格式,年-月 24 SimpleDateFormat dateFormat = new SimpleDateFormat("yy-MM"); 25 Date datitime = null; 26 try { 27 datitime = dateFormat.parse(dateString);//根據SimpleDateFormat對象的parse方法獲得Date類型的日期,方法參數是日期字符串 28 } catch (ParseException e) { 29 // TODO Auto-generated catch block 30 e.printStackTrace(); 31 } 32 //創建日歷對象 33 Calendar calendar = new GregorianCalendar(); 34 //設置此日歷對象的日期 35 calendar.setTime(datitime); 36 //創建數組保存日期,一個日期最多6行7列 37 int dateTimes[] = new int[6*7]; 38 39 //給日期數組賦值,根據GregorianCalendar對象的getActualMaximum方法獲得該月的最大天數,該方法的參數是GregorianCalendar對象的日期 40 //getActualMaximum自動判斷最大日期 41 for (int i = 1; i <= calendar.getActualMaximum(calendar.DATE); i++) { 42 /* 43 * 從該日歷1號在一周中的天數后開始賦值 44 * Calendar對象的get方法獲得的日期在一周中的天數會比我們的多一天,應是外國喜歡每周周日是第一天 45 * 數組索引從0開始,所以要-1再-1 46 * */ 47 dateTimes[i+calendar.get(calendar.DAY_OF_WEEK)-1-1] = i; 48 } 49 //打印輸出 50 System.out.println("日\t一\t二\t三\t四\t五\t六"); 51 for (int i = 0; i < dateTimes.length; i++) { 52 //從該日歷1號在一周中的天數后開始打印 53 if (dateTimes[i] != 0) { 54 System.out.print(dateTimes[i]); 55 } 56 System.out.print("\t"); 57 //每打印一周的日期就換行 58 if ((i+1) %7 == 0) { 59 System.out.println(""); 60 } 61 } 62 } 63 64 }