1 import java.util.Calendar; 2 /** 3 * 日曆類 4 */ 5 public class TestCalendar { 6 public static void main(String[] args) { 7 /** 8 * java.util.Calendar 日曆類 9 * 10 * 1.因爲Calendar類是抽象類,且Calendar類的構造方法是protected的, 11 * 因此沒法使用Calendar類的構造方法來建立對象,API中提供了getInstance方法用來建立對象。 12 * 13 * 2.使用該方法得到的Calendar對象就表明當前的系統時間,因爲Calendar類toString實現的沒有Date類那麼直觀, 14 * 因此直接輸出Calendar類的對象意義不大。 15 */ 16 Calendar cal = Calendar.getInstance(); //返回當前日曆對象 17 18 /** 19 * set方法的聲明爲:public final void set(int year,int month,int date) 20 * 21 * Calendar類中年份的數值直接書寫,月份的值爲實際的月份值減1,日期的值就是實際的日期值。 22 */ 23 cal.set(2016, 2, 23); 24 System.out.println(cal.getTime()); // 獲取爲日期Date類型:Wed Mar 23 12:19:30 CST 2016 25 26 /** 27 * 若是隻設定某個字段: 28 * 29 * 例如日期的值,則可使用以下set方法: 30 * public void set(int field,int value) 31 * 32 * 33 * 在該方法中,參數field表明要設置的字段的類型,常見類型以下: 34 * Calendar.YEAR---年份; 35 * Calendar.MONTH---月份; 36 * Calendar.DATE---日期; 37 * Calendar.DAY_OF_MONTH---日期,和Calendar.DATE字段徹底相同; 38 * Calendar.HOUR---12小時制的小時數; 39 * Calendar.HOUR_OF_DAY---24小時制的小時數; 40 * Calendar.MINUTE---分鐘; 41 * Calendar.SECOND---秒; 42 * Calendar.DAY_OF_WEEK---星期幾。 43 * 44 * 在Calendar類中,週日是1,週一是2,週二是3,依次類推。週六爲最後一天 45 * 46 * 後續的參數value表明設置成的值。 47 * 例如: 48 * c1.set(Calendar.DATE,10); 49 * 該代碼的做用是將c1對象表明的時間中日期設置爲10號,其它全部的數值會被從新計算, 50 * 例如星期幾以及對應的相對時間數值等。 51 */ 52 cal.set(Calendar.DATE, 10); //修改日期爲10號,修改以後cal對應的星期等都會從新計算 53 54 /** 55 * 得到Calendar類中的信息: 56 */ 57 int year =cal.get(cal.YEAR); //獲取年份 58 int month = cal.get(cal.MONTH); //獲取月份 59 int date = cal.get(cal.DATE); //獲取日期 60 61 int date1 = cal.get(cal.DAY_OF_MONTH); //獲取日期和cal.DATE同樣 62 int day = cal.get(cal.DAY_OF_WEEK); //獲取星期幾 63 int day2 = cal.get(cal.DAY_OF_YEAR); //獲取當前是一年中的第多少天 64 //某月中第幾周,以月份天數爲標準 65 int day3 = cal.get(cal.DAY_OF_WEEK_IN_MONTH);//按這個月1號算,1號起就是第1周,8號起就是第2周。 66 67 int hour = cal.get(cal.HOUR); //獲取12小時制的小時數 68 int hour2 = cal.get(cal.HOUR_OF_DAY); //獲取24小時制的小時數 69 70 int minute = cal.get(cal.MINUTE); //獲取分鐘 71 int second = cal.get(cal.SECOND); //獲取秒 72 73 int week1 = cal.get(cal.WEEK_OF_YEAR); //一年中的第幾周 74 int week2 = cal.get(cal.WEEK_OF_MONTH); //日曆式的第幾周 75 76 77 /** 78 * 若是須要指定一週的開始日期,則須要在指定開始日期以後再設置日期 79 * 默認一週的開始爲週日,結束爲週六 80 */ 81 cal.setFirstDayOfWeek(Calendar.MONDAY); //設置一週的第一天爲MONDAY 82 83 84 /** 85 * 獲取指定日期所在月最小日和最大日 最大日28天 29天 30天 31天 86 */ 87 Calendar calendar = Calendar.getInstance(); //返回當前日曆對象 88 int minDay = calendar.getActualMinimum(Calendar.DATE); 89 int maxDay = calendar.getActualMaximum(Calendar.DATE); // 獲取當月最大天數 90 System.out.println(minDay + "-" + maxDay); //1 - 31 91 92 /** 93 * 其餘方法說明: 94 * (1)add方法: public abstract void add(int field,int amount) 95 * 該方法的做用是在Calendar對象中的某個字段上增長或減小必定的數值,增長是amount的值爲正,減小是amount的值爲負。 96 */ 97 98 /** 99 * 例如計算當前時間100天之後的日期,代碼以下: 100 * 這裏add方法是指在c3對象的Calendar.DATE,也就是日期字段上增長100, 101 * 類內部會從新計算該日期對象中其它各字段的值,從而得到100天之後的 102 */ 103 Calendar c3 = Calendar.getInstance(); 104 c3.add(Calendar.DATE,100); 105 int year1 = c3.get(Calendar.YEAR); 106 int month1 = c3.get(Calendar.MONTH); 107 int d1 = c3.get(Calendar.DATE); 108 System.out.println(year1 + "年" + month1 + "月" + d1 + "日"); 109 110 /** 111 * (2)after方法: public boolean after(Object when) 112 * 該方法的做用是判斷當前日期對象是否在when對象的後面,若是在when對象的後面則返回true,不然返回false。 113 * 114 * (3)before方法: 該方法是判斷當前日期對象是否位於另一個日期對象以前。 115 */ 116 Calendar c4 = Calendar.getInstance(); 117 c4.set(2016,8-1,28); 118 119 Calendar c5 = Calendar.getInstance(); 120 c5.set(2016,10-1,1); 121 boolean b = c5.after(c4); //判斷兩個日期先後 122 System.out.println(b); 123 124 /** 125 * Calendar對象和相對時間之間的轉換: 126 * 127 * 1.在轉換時,使用Calendar類中的getTimeInMillis方法能夠將Calendar對象轉換爲相對時間。 128 * 129 * 2.在將相對時間轉換爲Calendar對象時,首先建立一個Calendar對象, 130 * 而後再使用Calendar類的setTimeInMillis方法設置時間便可。 131 */ 132 Calendar c6 = Calendar.getInstance(); 133 long t1 = c6.getTimeInMillis(); //將Calendar對象轉換爲相對時間 134 135 Calendar c9 = Calendar.getInstance(); 136 long t = 1252785271098L; 137 c9.setTimeInMillis(t); //將相對時間轉換成Calendar對象 138 139 /** 140 * 計算2016年8月20號和2016年8月29號之間相差的天數。 141 * 142 * 143 * 原理: 144 * 首先表明兩個特定的時間點,這裏使用Calendar的對象進行表明,而後將兩個時間點轉換爲對應的相對時間, 145 * 求兩個時間點相對時間的差值,而後除以一天的毫秒數(24小時*60分鐘*60秒*1000毫秒)便可得到對應的天數 146 */ 147 148 Calendar c1 = Calendar.getInstance(); 149 c1.set(2016, 8-1,20); 150 long time1 = c1.getTimeInMillis(); 151 152 Calendar c2 = Calendar.getInstance(); 153 c2.set(2016, 8-1,29); 154 long time2 = c1.getTimeInMillis(); 155 156 //計算天數 157 long days = (time2-time1)/(24*60*60*1000); 158 } 159 }