2011-01-07 64 views
0

我想了解這段代碼。我知道這個代碼給我的日曆,當我輸入年,月和日。然後程序顯示當月的日曆,另外代碼現在顯示我的時間和日期。但我想了解它是如何工作的?如何解釋這個關於日曆的java代碼

import   java.util.*; 
import   java.text.SimpleDateFormat; 
public class Calendar3 
{ 
    private static void doSimpleDateFormat() { 
    Calendar  now = Calendar.getInstance(); 
    SimpleDateFormat formatter = new SimpleDateFormat("E yyyy.MM.dd 'at' hh:mm:ss a zzz"); 
        System.out.print(" \n It is now : " + formatter.format(now.getTime())); 
        System.out.println(); 
    } 
    public static void CalendarDemo(int Year, int Month, int Date) { 
    GregorianCalendar a = new GregorianCalendar(); 
        a.set(Calendar.YEAR, Year); 
        a.set(Calendar.MONTH, (Month - 1)); 
        a.set(Calendar.DAY_OF_MONTH, 1); 
    int    weekday = a.get(Calendar.DAY_OF_WEEK); 
    int    month = a.get(Calendar.MONTH); 
        System.out.println("'\n'  YEAR : " + Year); 
    switch   (month) { 
    case 0: 
     System.out.println(); 
     System.out.println("  JANUARY   "); 
     System.out.println(); 
     break; 
    case 1: 
     System.out.println(); 
     System.out.println("  FEBRUARY   "); 
     System.out.println(); 
     break; 
    case 2: 
     System.out.println(); 
     System.out.println("   MARCH   "); 
     System.out.println(); 
     break; 
    case 3: 
     System.out.println(); 
     System.out.println("   APRIL   "); 
     System.out.println(); 
     break; 
    case 4: 
     System.out.println(); 
     System.out.println("   MAY   "); 
     System.out.println(); 
     break; 
    case 5: 
     System.out.println(); 
     System.out.println("   JUNE  "); 
     System.out.println(); 
     break; 
    case 6: 
     System.out.println(); 
     System.out.println("   JULY   "); 
     System.out.println(); 
     break; 
    case 7: 
     System.out.println(); 
     System.out.println("   AUGUST  "); 
     System.out.println(); 
     break; 
    case 8: 
     System.out.println(); 
     System.out.println("  SEPTEMBER   "); 
     System.out.println(); 
     break; 
    case 9: 
     System.out.println(); 
     System.out.println("  OCTOBER  "); 
     System.out.println(); 
     break; 
    case 10: 
     System.out.println(); 
     System.out.println("  NOVEMBER   "); 
     System.out.println(); 
     break; 
    case 11: 
     System.out.println(); 
     System.out.println("  DECEMBER   "); 
     System.out.println(); 
     break; 
    } 
        System.out.println("Sun Mon Tue Wed Thu Fri Sat"); 
    for    (int i = Calendar.SUNDAY; i < weekday; i++) { 
     System.out.print(" "); 
    } 
    do { 
     int    day = a.get(Calendar.DAY_OF_MONTH); 
     if (day < 10) { 
     System.out.print(" " + day); 
     } else if (day >= 10) { 
     System.out.print(day); 
     } 
     if (day == Date) { 
     System.out.print("* "); 
     } else { 
     System.out.print(" "); 
     } 
     if (weekday == Calendar.SATURDAY) { 
     System.out.println(); 
     } 
     a.add(Calendar.DAY_OF_MONTH, 1); 
     weekday = a.get(Calendar.DAY_OF_WEEK); 
    } 
    while (a.get(Calendar.MONTH) == month); 
    if (weekday != Calendar.SUNDAY) { 
     System.out.println(); 
    } 
    System.out.println(); 
    System.out.println("Note: '*' over any number is your desired number"); 
    System.out.println(); 
    doSimpleDateFormat(); 
    } 
} 
+2

它究竟是什麼,你不明白嗎? – Tedil 2011-01-07 23:12:33

+0

這部分日曆現在= Calendar.getInstance(); SimpleDateFormat formatter = new SimpleDateFormat('E yyyy.MM.dd'at'hh:mm:ss a zzz「); System.out.print(」\ n現在是:「+ formatter.format(now.getTime() )); } public static void CalendarDemo(int Year,int Month,int Date){GregorianCalendar a = new GregorianCalendar();} a.set(Calendar.YEAR,Year); a.set(Calendar.MONTH,(Month - 1)); a.set(Calendar.DAY_OF_MONTH,1); int weekday = a.get(Calendar.DAY_OF_WEEK); int month = a.get(Calendar.MONTH); System.out.println(「'\ n'YEAR:」+ Year); – MANAL 2011-01-07 23:45:58

回答

3

這是非常冗長的,並沒有特別好寫。 (例如,整個開關塊可以用一行代碼代替)

如果您想了解它的功能和工作原理,我建議您在IDE的調試器中逐步執行程序。這將逐行顯示所有變量的設置。

編輯:更短並不總是更好,但既然你想知道你能做多短。

import static java.util.Calendar.*; 

private static final SimpleDateFormat YEAR_MONTH = new SimpleDateFormat("'\n  YEAR: ' yyyy'\n  'MMMM'\n'"); 
public static void CalendarDemo(int year, int month, int date) { 
    GregorianCalendar a = new GregorianCalendar(year, month-1, 1); 
    System.out.printf("%n%s%nSun Mon Tue Wed Thu Fri Sat%n%"+4*(SUNDAY-a.get(DAY_OF_WEEK))+"s", YEAR_MONTH.format(a.getTime()).toUpperCase() , ""); 
    for(;a.get(MONTH) == month-1;a.add(DAY_OF_MONTH, 1)) { 
     int day = a.get(DAY_OF_MONTH); 
     System.out.printf("%2d%s%s", day, day == date ? "*" : " ", a.get(DAY_OF_WEEK) == SATURDAY ? "\n" : " "); 
    } 
    System.out.println("\n\nNote: '*' over any number is your desired number\n"); 
    doSimpleDateFormat(); 
} 

CalendarDemo(2011,01,07); 

打印

 
     YEAR: 2011 

     JANUARY 

Sun Mon Tue Wed Thu Fri Sat 
         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 
+0

我怎樣才能使它更短? 當我使用這個while(a.get(Calendar.MONTH)== month); 輸出成爲您的IDE中僅有的一年 – MANAL 2011-01-07 23:39:32

0
  • 轉到www.jetbrains.org,下載的IntelliJ社區版

    • 安裝它。
    • 創建一個項目並在其中放入代碼。

    • 添加的主方法

    公共靜態無效的主要(字串[] args){ Calendar3.CalendarDemo(2011,1,8); }

    • 放置一個斷點就行: GregorianCalendar的一個新的= GregorianCalendar的(); 通過單擊左側邊距。

    • 調試。

BTW:有一個格式化的問題,這一變化將幫助:

for (int i = Calendar.SUNDAY; i < weekday; i++) { 
     System.out.print(" "); 
}