Java時間相關內容學習(1) Calendar

來源:互聯網
上載者:User

Java 操作日期/時間,往往會涉及到Calendar,Date,DateFormat這些類。

最近決定把這些內容系統的整理一下,這樣以後使用的時候,會更得心應手。本章的內容是主要講解“Java時間架構”以及“類Calendar”。

在學習Calendar類時,我們先對它有個整體認識,心中建立一個架構,然後再通過樣本學習如何使用它。

Java 時間架構圖

Java 的Calendar, Date和DateFormat的關係圖如下:

說明:

(01) milliseconds 表示毫秒。

milliseconds = “實際時間” - “1970-01-01 00:00:00”。Calendar 和 Date依賴於 milliseconds,從而表示時間。

(02) Calendar表示日期/時間。

它是一個抽象類別,依賴於milliseconds。GregorianCalendar是Calendar的子類,通常我們通過Calendar.getInstance() 擷取Calendar執行個體時,實際上返回的是 GregorianCalendar 對象。

Calendar和Locale關聯,而Locale代表地區;Locale的值不同時,Calendar的日期/時間也不同。

Calendar和TimeZone關聯,而TimeZone代表時區;不同的時區,Calendar的日期/時間也不同。

(03) Date 表示日期/時間。

它也依賴於 milliseconds實現。

在 JDK 1.1 之前,通常是通過Data操作“年月日時分秒”。不過,由於Date的相關 API 不易於實現國際化。從 JDK 1.1 開始,應該使用 Calendar 類來操作“年月日時分秒”,同時可以通過 DateFormat 類來格式化和解析日期文字。Date 中的相應方法已廢棄。

(04) DateFormat是格式化/解析“日期/時間”的工具類。

它是Date的格式化工具,它能協助我們格式化Date,進而將Date轉換成我們想要的String字串供我們使用。

它是一個抽象類別。通常,我們通過getInstance(), getDateInstance()和getDateTimeInstance() 等擷取DateFormat執行個體時;實際上是返回的SimpleDateFormat對象。

Calendar 介紹

Calendar 定義

publicabstractclass Calendar implements Serializable, Cloneable, Comparable<Calendar> {}

Calendar 是一個抽象類別。

它的實現,採用了設計模式中的Factory 方法。表現在:當我們擷取Calendar執行個體時,Calendar會根據傳入的參數來返回相應的Calendar對象。擷取Calendar執行個體,有以下兩種方式: 1) 當我們通過 Calendar.getInstance() 擷取日曆時,預設的是返回的一個GregorianCalendar對象。    GregorianCalendar是Calendar的一個實作類別,它提供了世界上大多數省/地區使用的標準日曆系統。 2) 當我們通過 Calendar.getInstance(TimeZone timezone, Locale locale) 或 Calendar.getInstance(TimeZone timezone) 或 Calendar.getInstance(Locale locale)擷取日曆時,是返回“對應時區(zone) 或 地區(local)等所使用的日曆”。    例如,若是日本,則返回JapaneseImperialCalendar對象。

參考如下代碼:

public static Calendar getInstance(){    // 調用createCalendar()建立日曆    Calendar cal = createCalendar(TimeZone.getDefaultRef(), Locale.getDefault());    cal.sharedZone = true;    return cal;}          public static Calendar getInstance(TimeZone zone){    // 調用createCalendar()建立日曆    return createCalendar(zone, Locale.getDefault());}          public static Calendar getInstance(Locale aLocale) {    // 調用createCalendar()建立日曆    Calendar cal = createCalendar(TimeZone.getDefaultRef(), aLocale);    cal.sharedZone = true;    return cal;}     public static Calendar getInstance(TimeZone zone,                   Locale aLocale){    // 調用createCalendar()建立日曆    return createCalendar(zone, aLocale);}     private static Calendar createCalendar(TimeZone zone,                   Locale aLocale){    // (01) 若地區是“th”,則返回BuddhistCalendar對象    // (02) 若地區是“JP”,則返回JapaneseImperialCalendar對象    if ("th".equals(aLocale.getLanguage())        && ("TH".equals(aLocale.getCountry()))) {        return new sun.util.BuddhistCalendar(zone, aLocale);    } else if ("JP".equals(aLocale.getVariant())       && "JP".equals(aLocale.getCountry())       && "ja".equals(aLocale.getLanguage())) {        return new JapaneseImperialCalendar(zone, aLocale);    }                 // (03) 否則,返回GregorianCalendar對象    return new GregorianCalendar(zone, aLocale);    }

當我們擷取Calendar執行個體之後,就可以通過Calendar提供的一些列方法來操作日曆。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.