Calender的使用詳解


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的使用詳解


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM