Calendar和GregorianCalendar簡介
Calendar的中文翻譯是日歷,實際上,在歷史上有着許多種計時的方法。所以為了計時的統一,必需指定一個日歷的選擇。那現在最為普及和通用的日歷就是"Gregorian Calendar"。也就是我們在講述年份時常用"公元**年"。Calendar 在 Java 中是一個抽象類(Abstract Class),GregorianCalendar 是它的一個具體實現。Calendar.getInstance()中所獲得的實例就是一個"GreogrianCalendar"對象。
Calendar獲取時間的常見方法
import java.util.Calendar; public class Test { public static void main(String[] args) { Calendar cal = Calendar.getInstance(); int year = cal.get(Calendar.YEAR); //比當前月份少1 int month = cal.get(Calendar.MONTH); //date表示日期,day表示天數,所以date與day_of_month相同 int date = cal.get(Calendar.DATE); int dayOfMonth = cal.get(Calendar.DAY_OF_MONTH); //表示本周的第幾天,從周日開始計算 int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK); int dayOfYear = cal.get(Calendar.DAY_OF_YEAR); //12小時制 int hour = cal.get(Calendar.HOUR); //24小時制 int hourOfDay = cal.get(Calendar.HOUR_OF_DAY); int minute = cal.get(Calendar.MINUTE); int second = cal.get(Calendar.SECOND); int millisecond = cal.get(Calendar.MILLISECOND); int maxDate = cal.getActualMaximum(Calendar.DATE); System.out.println("現在的年份為:" + year); System.out.println("現在的月份為:" + month); System.out.println("現在的號為:" + date); System.out.println("現在的號為:" + dayOfMonth); System.out.println("現在是星期:" + dayOfWeek); System.out.println("現在過了的天數為:" + dayOfYear); System.out.println("現在幾點:" + hour); System.out.println("現在幾點:" + hourOfDay); System.out.println("現在幾分:" + minute); System.out.println("現在幾秒:" + second); System.out.println("現在幾毫秒:" + millisecond); System.out.println("本月最后一天是:" + maxDate); } }
補充說明:
(1)注意getActualMaximum()和getMaximum()的區別。getMaximum()獲取的“字段最大值”,是指在綜合所有的日期,在所有這些日期中得出的“字段最大值”。例如getMaximum(Calendar.DATE)的目的是“獲取日的最大值”。綜合所有的日期,得出一個月最多有31天。因此,getMaximum(Calendar.DATE)的返回值是31。getActualMaximum() 獲取的“當前日期時該字段的最大值”。例如,當日期為2013-09-01時,getActualMaximum(Calendar.DATE)是獲取“日的最大值”是30。當前日期是9月份,而9月只有30天。因此,getActualMaximum(Calendar.DATE)的返回值是30。
(2)Calendar.HOUR_OF_DAY使用24進制。Calendar.HOUR使用12進制。
Calendar設置時間的常見方法
Calendar的set()方法
set(int field, int value)是用來設置"年/月/日/小時/分鍾/秒/微秒"等值
set(int year, int month, int day, int hour, int minute, int second) 但沒有
set(int year, int month, int day, int hour, int minute, int second, int millisecond)
前面set(int,int,int,int,int,int)方法不會自動將MilliSecond清為0。
另外,月份的起始值為0而不是1,所以要設置八月時,我們用7而不是8。
calendar.set(Calendar.MONTH, 7);
Calendar對象的容錯性(Lenient設置)
我們知道特定的月份有不同的日期,當一個用戶給出錯誤的日期時,Calendar 如何處理的呢?
1 public class Test 2 { 3 public static void main(String[] args) throws Exception 4 { 5 Calendar cal = Calendar.getInstance(); 6 cal.set(2000, 1, 32, 0, 0, 0); 7 System.out.println(cal.getTime()); 8 cal.setLenient(false); 9 cal.set(2000, 1, 32, 0, 0, 0); 10 System.out.println(cal.getTime()); 11 } 12 }
執行結果為:
Fri Mar 03 00:00:00 CST 2000
Exception in thread "main" java.lang.IllegalArgumentException: DAY_OF_MONTH
at java.util.GregorianCalendar.computeTime(GregorianCalendar.java:2316)
at java.util.Calendar.updateTime(Calendar.java:2260)
at java.util.Calendar.getTimeInMillis(Calendar.java:1044)
at java.util.Calendar.getTime(Calendar.java:1017)
at Test.main(Test.java:27)
當我們設置該 Calendar 為 Lenient false 時,它會依據特定的月份檢查出錯誤的賦值。
Calendar 與 Date 的轉換
Calendar calendar = Calendar.getInstance();
// 從一個Calendar對象中獲取Date對象
Date date = calendar.getTime();
// 將 Date 對象反應到一個 Calendar 對象中,
// Calendar/GregorianCalendar沒有構造函數可以接受Date對象,所以我們必需先獲得一個實例,然后設置Date 對象
calendar.setTime(date);
聲明: 本文由金絲燕網原創編譯,轉載請保留鏈接: Calender的使用詳解