java.lang.Object
java.util.Calendar
public abstract class Calendar extends Object implements Serializable, Cloneable, Comparable< Calendar>
Calendar
類是一個抽象類,它爲特定瞬間與一組諸如 YEAR
、MONTH
、DAY_OF_MONTH
、HOUR
等 日曆字段
之間的轉換提供了一些方法,併爲操做日曆字段(例如得到下星期的日期)提供了一些方法。瞬間可用毫秒值來表示,它是距曆元(即格林威治標準時間 1970 年 1 月 1 日的 00:00:00.000,格里高利曆)的偏移量。html
該類還爲實現包範圍外的具體日曆系統提供了其餘字段和方法。這些字段和方法被定義爲 protected
。java
與其餘語言環境敏感類同樣,Calendar
提供了一個類方法 getInstance
,以得到此類型的一個通用的對象。Calendar
的 getInstance
方法返回一個Calendar
對象,其日曆字段已由當前日期和時間初始化:算法
Calendar rightNow = Calendar.getInstance();
Calendar
對象可以生成爲特定語言和日曆風格實現日期-時間格式化所需的全部日曆字段值,例如,日語-格里高裏歷,日語-傳統日曆。Calendar
定義了某些日曆字段返回值的範圍,以及這些值的含義。例如,對於全部日曆,日曆系統第一個月的值是 MONTH == JANUARY
。其餘值是由具體子類(例如 ERA
)定義的。有關此內容的細節,請參閱每一個字段的文檔和子類文檔。api
能夠經過調用 set
方法來設置日曆字段值。在須要計算時間值(距曆元所通過的毫秒)或日曆字段值以前,不會解釋 Calendar
中的全部字段值設置。調用 get
、getTimeInMillis
、getTime
、add
和 roll
涉及此類計算。數組
Calendar
有兩種解釋日曆字段的模式,即 lenient 和 non-lenient。當 Calendar
處於 lenient 模式時,它可接受比它所生成的日曆字段範圍更大範圍內的值。當 Calendar
從新計算日曆字段值,以便由 get()
返回這些值時,全部日曆字段都被標準化。例如,lenient 模式下的GregorianCalendar
將 MONTH == JANUARY
、DAY_OF_MONTH == 32
解釋爲 February 1。函數
當 Calendar
處於 non-lenient 模式時,若是其日曆字段中存在任何不一致性,它都會拋出一個異常。例如,GregorianCalendar
老是在 1 與月份的長度之間生成 DAY_OF_MONTH
值。若是已經設置了任何超出範圍的字段值,那麼在計算時間或日曆字段值時,處於 non-lenient 模式下的GregorianCalendar
會拋出一個異常。spa
Calendar
使用兩個參數定義了特定於語言環境的 7 天制星期:星期的第一天和第一個星期中的最小一天(從 1 到 7)。這些數字取自構造Calendar
時的語言環境資源數據。還能夠經過爲其設置值的方法來顯式地指定它們。.net
在設置或得到 WEEK_OF_MONTH
或 WEEK_OF_YEAR
字段時,Calendar
必須肯定一個月或一年的第一個星期,以此做爲參考點。一個月或一年的第一個星期被肯定爲開始於 getFirstDayOfWeek()
的最先七天,它最少包含那一個月或一年的 getMinimalDaysInFirstWeek()
天數。第一個星期以前的各星期編號爲 ...、-一、0;以後的星期編號爲 二、三、...。注意,get()
返回的標準化編號方式可能有所不一樣。例如,特定 Calendar
子類可能將某一年第 1 個星期以前的那個星期指定爲前一年的第 n
個星期。調試
在計算日曆字段中的日期和時間時,可能沒有足夠的信息用於計算(例如只有年和月,但沒有日),或者可能有不一致的信息( 例如 "Tuesday, July 15, 1996"(格林威治時間)——實際上,1996 年 7 月 15 日是星期一 )。 Calendar
將解析日曆字段值,以便用如下方式肯定日期和時間。code
若是日曆字段值中存在任何衝突,則 Calendar
將爲最近設置的日曆字段提供優先權。如下是日曆字段的默認組合。將使用由最近設置的單個字段所肯定的最近組合。
YEAR + MONTH + DAY_OF_MONTH YEAR + MONTH + WEEK_OF_MONTH + DAY_OF_WEEK YEAR + MONTH + DAY_OF_WEEK_IN_MONTH + DAY_OF_WEEK YEAR + DAY_OF_YEAR YEAR + DAY_OF_WEEK + WEEK_OF_YEAR
HOUR_OF_DAY AM_PM + HOUR
若是在選定的字段組合中,還有還沒有設置值的任一日曆字段,那麼 Calendar
將使用其默認值。每一個字段的默認值可能依據具體的日曆系統而有所不一樣。例如,在 GregorianCalendar
中,字段的默認值與曆元起始部分的字段值相同:即 YEAR = 1970
、MONTH = JANUARY
、DAY_OF_MONTH = 1
,等等。
注: 對於某些特別時間的解釋可能會有某些歧義,能夠用下列方式解決:
日期或時間格式字符串不是日曆定義的一部分,由於在運行時,用戶必須可以修改或重寫它們。可使用 DateFormat
格式化日期。
可使用三種方法更改日曆字段: set()
、 add()
和 roll()
。
set(f, value)
將日曆字段 f
更改成 value
。此外,它設置了一個內部成員變量,以指示日曆字段 f
已經被更改。儘管日曆字段 f
是當即更改的,可是直到下次調用 get()
、getTime()
、getTimeInMillis()
、add()
或 roll()
時纔會從新計算日曆的時間值(以毫秒爲單位)。所以,屢次調用set()
不會觸發屢次沒必要要的計算。使用 set()
更改日曆字段的結果是,其餘日曆字段也可能發生更改,這取決於日曆字段、日曆字段值和日曆系統。此外,在從新計算日曆字段以後,get(f)
不必經過調用 set
方法返回 value
集合。具體細節是經過具體的日曆類肯定的。
示例:假定 GregorianCalendar
最初被設置爲 1999 年 8 月 31 日。調用 set(Calendar.MONTH, Calendar.SEPTEMBER)
將該日期設置爲 1999 年 9 月 31 日。若是隨後調用 getTime()
,那麼這是解析 1999 年 10 月 1 日的一個暫時內部表示。可是,在調用 getTime()
以前調用set(Calendar.DAY_OF_MONTH, 30)
會將該日期設置爲 1999 年 9 月 30 日,由於在調用 set()
以後沒有發生從新計算。
add(f, delta)
將 delta
添加到 f
字段中。這等同於調用 set(f, get(f) + delta)
,但要帶如下兩個調整:
Add 規則 1。調用後
f
字段的值減去調用前f
字段的值等於delta
,以字段f
中發生的任何溢出爲模。溢出發生在字段值超出其範圍時,結果,下一個更大的字段會遞增或遞減,並將字段值調整回其範圍內。Add 規則 2。若是指望某一個更小的字段是不變的,但讓它等於之前的值是不可能的,由於在字段
f
發生更改以後,或者在出現其餘約束以後,好比時區偏移量發生更改,它的最大值和最小值也在發生更改,而後它的值被調整爲儘可能接近於所指望的值。更小的字段表示一個更小的時間單元。HOUR
是一個比DAY_OF_MONTH
小的字段。對於不指望是不變字段的更小字段,無需進行任何調整。日曆系統會肯定指望不變的那些字段。
此外,與 set()
不一樣,add()
強迫日曆系統當即從新計算日曆的毫秒數和全部字段。
示例:假定 GregorianCalendar
最初被設置爲 1999 年 8 月 31 日。調用 add(Calendar.MONTH, 13)
將日曆設置爲 2000 年 9 月 30 日。Add 規則 1 將 MONTH
字段設置爲 September,由於向 August 添加 13 個月得出的就是下一年的 September。由於在 GregorianCalendar
中,DAY_OF_MONTH
不多是 9 月 31 日,因此 add 規則 2 將 DAY_OF_MONTH
設置爲 30,即最可能的值。儘管它是一個更小的字段,但不能根據規則 2 調整DAY_OF_WEEK
,由於在 GregorianCalendar
中的月份發生變化時,該值也須要發生變化。
roll(f, delta)
將 delta
添加到 f
字段中,但不更改更大的字段。這等同於調用 add(f, delta)
,但要帶如下調整:
Roll 規則。在完成調用後,更大的字段無變化。更大的字段表示一個更大的時間單元。
DAY_OF_MONTH
是一個比HOUR
大的字段。
示例:請參閱 GregorianCalendar.roll(int, int)
。
使用模型。爲了幫助理解 add()
和 roll()
的行爲,假定有一個用戶界面組件,它帶有用於月、日、年和底層 GregorianCalendar
的遞增或遞減按鈕。若是從界面上讀取的日期爲 1999 年 1 月 31 日,而且用戶按下月份的遞增按鈕,那麼應該獲得什麼?若是底層實現使用 set()
,那麼能夠將該日期讀爲 1999 年 3 月 3 日。更好的結果是 1999 年 2 月 28 日。此外,若是用戶再次按下月份的遞增按鈕,那麼該日期應該讀爲 1999 年 3 月 31 日,而不是 1999 年 3 月 28 日。經過保存原始日期並使用 add()
或 roll()
,根據是否會影響更大的字段,用戶界面能夠像大多數用戶所指望的那樣運行。
System.currentTimeMillis()
,
Date
,
GregorianCalendar
,
TimeZone
,
DateFormat
,
序列化表格
字段摘要 | |
---|---|
static int |
ALL_STYLES 指示全部風格名稱的 getDisplayNames 的風格說明符,好比 "January" 和 "Jan"。 |
static int |
AM 指示從午夜到中午以前這段時間的 AM_PM 字段值。 |
static int |
AM_PM get 和 set 的字段數字,指示 HOUR 是在中午以前仍是在中午以後。 |
static int |
APRIL 指示在格里高利曆和羅馬儒略曆中一年中第四個月的 MONTH 字段值。 |
protected boolean |
areFieldsSet 若是 fields[] 與當前的設置時間同步,則返回 true。 |
static int |
AUGUST 指示在格里高利曆和羅馬儒略曆中一年中第八個月的 MONTH 字段值。 |
static int |
DATE get 和 set 的字段數字,指示一個月中的某天。 |
static int |
DAY_OF_MONTH get 和 set 的字段數字,指示一個月中的某天。 |
static int |
DAY_OF_WEEK get 和 set 的字段數字,指示一個星期中的某天。 |
static int |
DAY_OF_WEEK_IN_MONTH get 和 set 的字段數字,指示當前月中的第幾個星期。 |
static int |
DAY_OF_YEAR get 和 set 的字段數字,指示當前年中的天數。 |
static int |
DECEMBER 指示在格里高利曆和羅馬儒略曆中一年中第十二個月的 MONTH 字段值。 |
static int |
DST_OFFSET get 和 set 的字段數字,以毫秒爲單位指示夏令時的偏移量。 |
static int |
ERA 指示年代的 get 和 set 的字段數字,好比羅馬儒略曆中的 AD 或 BC。 |
static int |
FEBRUARY 指示在格里高利曆和羅馬儒略曆中一年中第二個月的 MONTH 字段值。 |
static int |
FIELD_COUNT get 和 set 可識別的不一樣字段的數量。 |
protected int[] |
fields 此日曆當前設置時間的日曆字段值。 |
static int |
FRIDAY 指示 Friday 的 DAY_OF_WEEK 字段值。 |
static int |
HOUR get 和 set 的字段數字,指示上午或下午的小時。 |
static int |
HOUR_OF_DAY get 和 set 的字段數字,指示一天中的小時。 |
protected boolean[] |
isSet 通知是否設置了該日曆某一指定日曆字段的標誌。 |
protected boolean |
isTimeSet 若是 time 值是一個有效值,則返回 true。 |
static int |
JANUARY 指示在格里高利曆和羅馬儒略曆中一年中第一個月的 MONTH 字段值。 |
static int |
JULY 指示在格里高利曆和羅馬儒略曆中一年中第七個月的 MONTH 字段值。 |
static int |
JUNE 指示在格里高利曆和羅馬儒略曆中一年中第六個月的 MONTH 字段值。 |
static int |
LONG 指示長名稱的 getDisplayName 和 getDisplayNames 的風格說明符,好比 "January"。 |
static int |
MARCH 指示在格里高利曆和羅馬儒略曆中一年中第三個月的 MONTH 字段值。 |
static int |
MAY 指示在格里高利曆和羅馬儒略曆中一年中第五個月的 MONTH 字段值。 |
static int |
MILLISECOND get 和 set 的字段數字,指示一秒中的毫秒。 |
static int |
MINUTE get 和 set 的字段數字,指示一小時中的分鐘。 |
static int |
MONDAY 指示 Monday 的 DAY_OF_WEEK 字段值。 |
static int |
MONTH 指示月份的 get 和 set 的字段數字。 |
static int |
NOVEMBER 指示在格里高利曆和羅馬儒略曆中一年中第十一個月的 MONTH 字段值。 |
static int |
OCTOBER 指示在格里高利曆和羅馬儒略曆中一年中第十個月的 MONTH 字段值。 |
static int |
PM 指示從中午到午夜以前這段時間的 AM_PM 字段值。 |
static int |
SATURDAY 指示 Saturday 的 DAY_OF_WEEK 字段值。 |
static int |
SECOND get 和 set 的字段數字,指示一分鐘中的秒。 |
static int |
SEPTEMBER 指示在格里高利曆和羅馬儒略曆中一年中第九個月的 MONTH 字段值。 |
static int |
SHORT 指示短名稱的 getDisplayName 和 getDisplayNames 的風格說明符,好比 "Jan"。 |
static int |
SUNDAY 指示 Sunday 的 DAY_OF_WEEK 字段值。 |
static int |
THURSDAY 指示 Thursday 的 DAY_OF_WEEK 字段值。 |
protected long |
time 日曆的當前設置時間,以毫秒爲單位,表示自格林威治標準時間 1970 年 1月 1 日 0:00:00 後通過的時間。 |
static int |
TUESDAY 指示 Tuesday 的 DAY_OF_WEEK 字段值。 |
static int |
UNDECIMBER 指示一年中第十三個月的 MONTH 字段值。 |
static int |
WEDNESDAY 指示 Wednesday 的 DAY_OF_WEEK 字段值。 |
static int |
WEEK_OF_MONTH get 和 set 的字段數字,指示當前月中的星期數。 |
static int |
WEEK_OF_YEAR get 和 set 的字段數字,指示當前年中的星期數。 |
static int |
YEAR 指示年的 get 和 set 的字段數字。 |
static int |
ZONE_OFFSET get 和 set 的字段數字,以毫秒爲單位指示距 GMT 的大體偏移量。 |
構造方法摘要 | |
---|---|
protected |
Calendar() 構造一個帶有默認時區和語言環境的 Calendar。 |
protected |
Calendar(TimeZone zone, Locale aLocale) 構造一個帶有指定時區和語言環境的 Calendar。 |
方法摘要 | |
---|---|
abstract void |
add(int field, int amount) 根據日曆的規則,爲給定的日曆字段添加或減去指定的時間量。 |
boolean |
after(Object when) 判斷此 Calendar 表示的時間是否在指定 Object 表示的時間以後,返回判斷結果。 |
boolean |
before(Object when) 判斷此 Calendar 表示的時間是否在指定 Object 表示的時間以前,返回判斷結果。 |
void |
clear() 將此 Calendar 的所日曆字段值和時間值(從曆元至如今的毫秒偏移量)設置成未定義。 |
void |
clear(int field) 將此 Calendar 的給定日曆字段值和時間值(從曆元至如今的毫秒偏移量)設置成未定義。 |
Object |
clone() 建立並返回此對象的一個副本。 |
int |
compareTo(Calendar anotherCalendar) 比較兩個 Calendar 對象表示的時間值(從曆元至如今的毫秒偏移量)。 |
protected void |
complete() 填充日曆字段中全部未設置的字段。 |
protected abstract void |
computeFields() 將當前毫秒時間值 time 轉換爲 fields[] 中的日曆字段值。 |
protected abstract void |
computeTime() 將 fields[] 中的當前日曆字段值轉換爲毫秒時間值 time 。 |
boolean |
equals(Object obj) 將此 Calendar 與指定 Object 比較。 |
int |
get(int field) 返回給定日曆字段的值。 |
int |
getActualMaximum(int field) 給定此 Calendar 的時間值,返回指定日曆字段可能擁有的最大值。 |
int |
getActualMinimum(int field) 給定此 Calendar 的時間值,返回指定日曆字段可能擁有的最小值。 |
static Locale[] |
getAvailableLocales() 返回全部語言環境的數組,此類的 getInstance 方法能夠爲其返回本地化的實例。 |
String |
getDisplayName(int field, int style, Locale locale) 返回給定 style 和 locale 下的日曆 field 值的字符串表示形式。 |
Map<String,Integer> |
getDisplayNames(int field, int style, Locale locale) 返回給定 style 和 locale 下包含日曆 field 全部名稱的 Map 及其相應字段值。 |
int |
getFirstDayOfWeek() 獲取一星期的第一天;例如,在美國,這一天是 SUNDAY ,而在法國,這一天是 MONDAY 。 |
abstract int |
getGreatestMinimum(int field) 返回此 Calendar 實例給定日曆字段的最高的最小值。 |
static Calendar |
getInstance() 使用默認時區和語言環境得到一個日曆。 |
static Calendar |
getInstance(Locale aLocale) 使用默認時區和指定語言環境得到一個日曆。 |
static Calendar |
getInstance(TimeZone zone) 使用指定時區和默認語言環境得到一個日曆。 |
static Calendar |
getInstance(TimeZone zone, Locale aLocale) 使用指定時區和語言環境得到一個日曆。 |
abstract int |
getLeastMaximum(int field) 返回此 Calendar 實例給定日曆字段的最低的最大值。 |
abstract int |
getMaximum(int field) 返回此 Calendar 實例給定日曆字段的最大值。 |
int |
getMinimalDaysInFirstWeek() 獲取一年中第一個星期所需的最少天數,例如,若是定義第一個星期包含一年第一個月的第一天,則此方法將返回 1。 |
abstract int |
getMinimum(int field) 返回此 Calendar 實例給定日曆字段的最小值。 |
Date |
getTime() 返回一個表示此 Calendar 時間值(從曆元至如今的毫秒偏移量)的 Date 對象。 |
long |
getTimeInMillis() 返回此 Calendar 的時間值,以毫秒爲單位。 |
TimeZone |
getTimeZone() 得到時區。 |
int |
hashCode() 返回該此日曆的哈希碼。 |
protected int |
internalGet(int field) 返回給定日曆字段的值。 |
boolean |
isLenient() 判斷日期/時間的解釋是否爲寬鬆的。 |
boolean |
isSet(int field) 肯定給定日曆字段是否已經設置了一個值,其中包括由於調用 get 方法觸發內部字段計算而致使已經設置該值的狀況。 |
abstract void |
roll(int field, boolean up) 在給定的時間字段上添加或減去(上/下)單個時間單元,不更改更大的字段。 |
void |
roll(int field, int amount) 向指定日曆字段添加指定(有符號的)時間量,不更改更大的字段。 |
void |
set(int field, int value) 將給定的日曆字段設置爲給定值。 |
void |
set(int year, int month, int date) 設置日曆字段 YEAR 、MONTH 和 DAY_OF_MONTH 的值。 |
void |
set(int year, int month, int date, int hourOfDay, int minute) 設置日曆字段 YEAR 、MONTH 、DAY_OF_MONTH 、HOUR_OF_DAY 和 MINUTE 的值。 |
void |
set(int year, int month, int date, int hourOfDay, int minute, int second) 設置字段 YEAR 、MONTH 、DAY_OF_MONTH 、HOUR 、MINUTE 和 SECOND 的值。 |
void |
setFirstDayOfWeek(int value) 設置一星期的第一天是哪一天;例如,在美國,這一天是 SUNDAY ,而在法國,這一天是 MONDAY 。 |
void |
setLenient(boolean lenient) 指定日期/時間解釋是不是寬鬆的。 |
void |
setMinimalDaysInFirstWeek(int value) 設置一年中第一個星期所需的最少天數,例如,若是定義第一個星期包含一年第一個月的第一天,則使用值 1 調用此方法。 |
void |
setTime(Date date) 使用給定的 Date 設置此 Calendar 的時間。 |
void |
setTimeInMillis(long millis) 用給定的 long 值設置此 Calendar 的當前時間值。 |
void |
setTimeZone(TimeZone value) 使用給定的時區值來設置時區。 |
String |
toString() 返回此日曆的字符串表示形式。 |
從類 java.lang.Object 繼承的方法 |
---|
finalize, getClass, notify, notifyAll, wait, wait, wait |
字段詳細信息 |
---|
public static final int ERA
get
和
set
的字段數字,好比羅馬儒略曆中的 AD 或 BC。這是一個特定於日曆的值;請參閱子類文檔。
public static final int YEAR
get
和
set
的字段數字。這是一個特定於日曆的值;請參閱子類文檔。
public static final int MONTH
get
和
set
的字段數字。這是一個特定於日曆的值。在格里高利曆和羅馬儒略曆中一年中的第一個月是
JANUARY
,它爲 0;最後一個月取決於一年中的月份數。
public static final int WEEK_OF_YEAR
get
和
set
的字段數字,指示當前年中的星期數。正如
getFirstDayOfWeek()
和
getMinimalDaysInFirstWeek()
所定義的那樣,一年中第一個星期的值爲 1。子類定義一年第一個星期以前的天數,即
WEEK_OF_YEAR
的值。
public static final int WEEK_OF_MONTH
get
和
set
的字段數字,指示當前月中的星期數。正如
getFirstDayOfWeek()
和
getMinimalDaysInFirstWeek()
所定義的那樣,一個月中第一個星期的值爲 1。子類定義一個月第一個星期以前的天數,即
WEEK_OF_MONTH
的值。
public static final int DATE
get
和
set
的字段數字,指示一個月中的某天。它與
DAY_OF_MONTH
是同義詞。一個月中第一天的值爲 1。
DAY_OF_MONTH
,
常量字段值
public static final int DAY_OF_MONTH
public static final int DAY_OF_YEAR
get
和
set
的字段數字,指示當前年中的天數。一年中第一天的值爲 1。
public static final int DAY_OF_WEEK
get
和
set
的字段數字,指示一個星期中的某天。該字段可取的值爲
SUNDAY
、
MONDAY
、
TUESDAY
、
WEDNESDAY
、
THURSDAY
、
FRIDAY
和
SATURDAY
。
public static final int DAY_OF_WEEK_IN_MONTH
get
和
set
的字段數字,指示當前月中的第幾個星期。與
DAY_OF_WEEK
字段一塊兒使用時,就能夠惟一地指定某月中的某一天。與
WEEK_OF_MONTH
和
WEEK_OF_YEAR
不一樣,該字段的值並
不 取決於
getFirstDayOfWeek()
或
getMinimalDaysInFirstWeek()
。
DAY_OF_MONTH
1 到
7
老是對應於
DAY_OF_WEEK_IN_MONTH 1
;
8
到
14
老是對應於
DAY_OF_WEEK_IN_MONTH 2
,依此類推。
DAY_OF_WEEK_IN_MONTH 0
表示
DAY_OF_WEEK_IN_MONTH 1
以前的那個星期。負值是從一個月的末尾開始逆向計數,所以,一個月的最後一個星期天被指定爲
DAY_OF_WEEK = SUNDAY, DAY_OF_WEEK_IN_MONTH = -1
。由於負值是逆向計數的,因此它們在月份中的對齊方式一般與正值的不一樣。例如,若是一個月有 31 天,那麼
DAY_OF_WEEK_IN_MONTH -1
將與
DAY_OF_WEEK_IN_MONTH 5
和
DAY_OF_WEEK_IN_MONTH 4
的末尾相重疊。
DAY_OF_WEEK
,
WEEK_OF_MONTH
,
常量字段值
public static final int AM_PM
get
和
set
的字段數字,指示
HOUR
是在中午以前仍是在中午以後。例如,在 10:04:15.250 PM 這一時刻,
AM_PM
爲
PM
。
public static final int HOUR
get
和
set
的字段數字,指示上午或下午的小時。
HOUR
用於 12 小時制時鐘 (0 - 11)。中午和午夜用 0 表示,不用 12 表示。例如,在 10:04:15.250 PM 這一時刻,
HOUR
爲 10。
AM_PM
,
HOUR_OF_DAY
,
常量字段值
public static final int HOUR_OF_DAY
get
和
set
的字段數字,指示一天中的小時。
HOUR_OF_DAY
用於 24 小時制時鐘。例如,在 10:04:15.250 PM 這一時刻,
HOUR_OF_DAY
爲 22。
public static final int MINUTE
get
和
set
的字段數字,指示一小時中的分鐘。例如,在 10:04:15.250 PM 這一時刻,
MINUTE
爲 4。
public static final int SECOND
get
和
set
的字段數字,指示一分鐘中的秒。例如,在 10:04:15.250 PM 這一時刻,
SECOND
爲 15。
public static final int MILLISECOND
get
和
set
的字段數字,指示一秒中的毫秒。例如,在 10:04:15.250 PM 這一時刻,
MILLISECOND
爲 250。
public static final int ZONE_OFFSET
get
和
set
的字段數字,以毫秒爲單位指示距 GMT 的大體偏移量。
若是 TimeZone
實現子類支持歷史上用過的 GMT 偏移量更改,則此字段可反應此 Calendar
時區的正確 GMT 偏移量值。
public static final int DST_OFFSET
get
和
set
的字段數字,以毫秒爲單位指示夏令時的偏移量。
若是 TimeZone
實現子類支持歷史上用過的 Daylight Saving Time 時間表更改,則此字段可反應此 Calendar
時區的正確夏令時偏移量值。
public static final int FIELD_COUNT
get
和
set
可識別的不一樣字段的數量。字段編號的範圍是從 0 到
FIELD_COUNT-1
。
public static final int SUNDAY
DAY_OF_WEEK
字段值。
public static final int MONDAY
DAY_OF_WEEK
字段值。
public static final int TUESDAY
DAY_OF_WEEK
字段值。
public static final int WEDNESDAY
DAY_OF_WEEK
字段值。
public static final int THURSDAY
DAY_OF_WEEK
字段值。
public static final int FRIDAY
DAY_OF_WEEK
字段值。
public static final int SATURDAY
DAY_OF_WEEK
字段值。
public static final int JANUARY
public static final int FEBRUARY
public static final int MARCH
public static final int APRIL
public static final int MAY
public static final int JUNE
public static final int JULY
public static final int AUGUST
public static final int SEPTEMBER
public static final int OCTOBER
public static final int NOVEMBER
public static final int DECEMBER
public static final int UNDECIMBER
public static final int AM
public static final int PM
public static final int ALL_STYLES
getDisplayNames
的風格說明符,好比 "January" 和 "Jan"。
public static final int SHORT
getDisplayName
和
getDisplayNames
的風格說明符,好比 "Jan"。
public static final int LONG
getDisplayName
和
getDisplayNames
的風格說明符,好比 "January"。
protected int[] fields
FIELD_COUNT
整數數組,索引值爲 ERA 到
DST_OFFSET
。
protected boolean[] isSet
FIELD_COUNT
布爾值數組,索引值爲 ERA 到
DST_OFFSET
。
protected long time
isTimeSet
protected boolean isTimeSet
time
值是一個有效值,則返回 true。經過更改
field[]
的項,可使時間無效。
time
protected boolean areFieldsSet
fields[]
與當前的設置時間同步,則返回 true。若是返回 false,則在下一次試圖得到某一字段的值時,將強行從新計算
time
當前值中的全部字段。
構造方法詳細信息 |
---|
protected Calendar()
TimeZone.getDefault()
protected Calendar(TimeZone zone, Locale aLocale)
zone
- 要使用的時區
aLocale
- 用於星期數據的語言環境
方法詳細信息 |
---|
public static Calendar getInstance()
Calendar
基於當前時間,使用了默認時區和默認語言環境。
public static Calendar getInstance(TimeZone zone)
Calendar
基於當前時間,使用了給定時區和默認語言環境。
zone
- 要使用的時區
public static Calendar getInstance(Locale aLocale)
Calendar
基於當前時間,使用了默認時區和給定的語言環境。
aLocale
- 用於星期數據的語言環境
public static Calendar getInstance(TimeZone zone, Locale aLocale)
Calendar
基於當前時間,使用了給定的時區和給定的語言環境。
zone
- 要使用的時區
aLocale
- 用於星期數據的語言環境
public static Locale[] getAvailableLocales()
getInstance
方法能夠爲其返回本地化的實例。返回的數組必須至少包含一個
Locale
實例,它等同
Locale.US
。
Calendar
實例是可用的。
protected abstract void computeTime()
fields[]
中的當前日曆字段值轉換爲毫秒時間值
time
。
complete()
,
computeFields()
protected abstract void computeFields()
time
轉換爲
fields[]
中的日曆字段值。這容許您將該日曆字段值與爲日曆設置的新時間同步。並
不 首先從新計算該時間;爲了從新計算時間和字段,請調用
complete()
方法。
computeTime()
public final Date getTime()
Calendar
時間值(從
曆元至如今的毫秒偏移量)的
Date
對象。
Date
。
setTime(Date)
,
getTimeInMillis()
public final void setTime(Date date)
Date
設置此 Calendar 的時間。
注:使用 Date(Long.MAX_VALUE)
或 Date(Long.MIN_VALUE)
調用 setTime()
可能產生來自 get()
的錯誤字段值。
date
- 給定的 Date。
getTime()
,
setTimeInMillis(long)
public long getTimeInMillis()
getTime()
,
setTimeInMillis(long)
public void setTimeInMillis(long millis)
millis
- 新時間,以從曆元至如今所通過的 UTC 毫秒數形式。
setTime(Date)
,
getTimeInMillis()
public int get(int field)
complete()
方法處理的,這個過程與日曆系統有關。
field
- 給定的日曆字段。
ArrayIndexOutOfBoundsException
- 若是指定字段超出範圍 (
field < 0 || field >= FIELD_COUNT
)。
set(int,int)
,
complete()
protected final int internalGet(int field)
field
- 給定的日曆字段。
get(int)
public void set(int field, int value)
field
- 給定的日曆字段。
value
- 給定日曆字段所要設置的值。
ArrayIndexOutOfBoundsException
- 若是指定字段超出範圍 (
field < 0 || field >= FIELD_COUNT
),而且處於 non-lenient 模式下。
set(int,int,int)
,
set(int,int,int,int,int)
,
set(int,int,int,int,int,int)
,
get(int)
public final void set(int year, int month, int date)
YEAR
、
MONTH
和
DAY_OF_MONTH
的值。保留其餘日曆字段之前的值。若是不須要這樣作,則先調用
clear()
。
year
- 用來設置
YEAR
日曆字段的值。
month
- 用來設置
MONTH
日曆字段的值。Month 值是基於 0 的。例如,0 表示 January。
date
- 用來設置
DAY_OF_MONTH
日曆字段的值。
set(int,int)
,
set(int,int,int,int,int)
,
set(int,int,int,int,int,int)
public final void set(int year, int month, int date, int hourOfDay, int minute)
YEAR
、
MONTH
、
DAY_OF_MONTH
、
HOUR_OF_DAY
和
MINUTE
的值。保留其餘字段之前的值。若是不須要這樣作,則先調用
clear()
。
year
- 用來設置
YEAR
日曆字段的值。
month
- 用來設置
MONTH
日曆字段的值。Month 值是基於 0 的。例如,0 表示 January。
date
- 用來設置
DAY_OF_MONTH
日曆字段的值。
hourOfDay
- 用來設置
HOUR_OF_DAY
日曆字段的值。
minute
- 用來設置
MINUTE
日曆字段的值。
set(int,int)
,
set(int,int,int)
,
set(int,int,int,int,int,int)
public final void set(int year, int month, int date, int hourOfDay, int minute, int second)
YEAR
、
MONTH
、
DAY_OF_MONTH
、
HOUR
、
MINUTE
和
SECOND
的值。保留其餘字段之前的值。若是不須要這樣作,則先調用
clear()
。
year
- 用來設置
YEAR
日曆字段的值。
month
- 用來設置
MONTH
日曆字段的值。Month 值是基於 0 的。例如,0 表示 January。
date
- 用來設置
DAY_OF_MONTH
日曆字段的值。
hourOfDay
- 用來設置
HOUR_OF_DAY
日曆字段的值。
minute
- 用來設置
MINUTE
日曆字段的值。
second
- 用來設置
SECOND
日曆字段的值。
set(int,int)
,
set(int,int,int)
,
set(int,int,int,int,int)
public final void clear()
Calendar
的所日曆字段值和時間值(從
曆元至如今的毫秒偏移量)設置成未定義。這意味着
isSet()
對於全部的日曆字段都將返回
false
,而且日期和時間計算會將這些字段做爲從未設置的字段對待。
Calendar
實現類可能對日期/時間計算使用字段的特定默認值。例如,若是未定義
YEAR
字段值,則
GregorianCalendar
會使用 1970。
clear(int)
public final void clear(int field)
Calendar
的給定日曆字段值和時間值(從
曆元至如今的毫秒偏移量)設置成未定義。這意味着
isSet(field)
將返回
false
,而且日期和時間計算會將該字段做爲從未設置的字段對待。
Calendar
實現類可能對日期和時間計算使用字段的特定默認值。
HOUR_OF_DAY
、HOUR
和 AM_PM
字段都是單獨處理的,而且應用了一天中時間的解析規則。清除其中的一個字段不會重置此 Calendar
中的小時值。使用 set(Calendar.HOUR_OF_DAY, 0)
重置小時值。
field
- 要清除的日曆字段。
clear()
public final boolean isSet(int field)
get
方法觸發內部字段計算而致使已經設置該值的狀況。
true
;不然返回
false
。
public String getDisplayName(int field, int style, Locale locale)
style
和
locale
下的日曆
field
值的字符串表示形式。若是沒有可用的字符串表示形式,則返回
null
。若是字符串表示形式可用於給定的日曆
field
,則此方法調用
get(field)
來獲取日曆
field
值。
例如,若是此 Calendar
是 GregorianCalendar
而且其日期是 2005-01-01,那麼 MONTH
字段的字符串表示形式在英語語言環境中將是 long 類型的 "January" 或者 short 類型的 "Jan"。然而,DAY_OF_MONTH
字段沒有可用的字符串表示形式,而且此方法將返回 null
。
默認實現支持日曆字段,DateFormatSymbols
在給定 locale
中具備此類名稱。
field
- 其字符串表示形式返回的日曆字段
style
- 應用於字符串表示形式的類型;
SHORT
或
LONG
之一。
locale
- 字符串表示形式的語言環境
style
中給定
field
的字符串表示形式;若是沒有可用的字符串表示形式,則返回
null
。
IllegalArgumentException
- 若是
field
或
style
無效,若是此
Calendar
處於 non-lenient 模式而且全部日曆字段都有無效值
NullPointerException
- 若是
locale
爲 null
public Map<String,Integer> getDisplayNames(int field, int style, Locale locale)
style
和
locale
下包含日曆
field
全部名稱的
Map
及其相應字段值。例如,若是此
Calendar
是
GregorianCalendar
,則在英語語言環境的
short 類型中的返回映射將包含 "Jan" 到
JANUARY
,"Feb" 到
FEBRUARY
諸如此類。
能夠考慮用其餘日曆字段值來肯定顯示名稱集。例如,若是此 Calendar
是月與日的日曆系統而且由 YEAR
字段給定的年值有閏月,此方法將返回包含閏月名稱的月名稱,而且月名稱被映射到該年中其指定值。
默認實現支持 DateFormatSymbols
中包含的顯示名稱。例如,若是 field
是 MONTH
而且 style
是 ALL_STYLES
,則此方法返回包含DateFormatSymbols.getShortMonths()
和 DateFormatSymbols.getMonths()
返回的全部字符串的 Map
。
field
- 其返回顯示名稱的日曆字段
style
- 應用於顯示名稱的風格;
SHORT
、
LONG
或
ALL_STYLES
之一。
locale
- 顯示名稱的語言環境
style
和
locale
下的全部顯示名稱的
Map
及其字段值;若是沒有顯示名稱,則返回
null
IllegalArgumentException
- 若是
field
或
style
無效,若是此
Calendar
處於 non-lenient 模式而且全部日曆字段都有無效值
NullPointerException
- 若是
locale
爲 null
protected void complete()
computeTime()
方法。而後調用
computeFields()
方法來計算全部的日曆字段值。
public boolean equals(Object obj)
Calendar
與指定
Object
比較。當且僅當參數是同一日曆系統的
Calendar
對象時,結果才爲
true
,該日曆系統將同一
Calendar
參數下的同一時間值(從
曆元至如今的毫秒偏移量)表示爲此對象。
Calendar
參數是經過 isLenient
、getFirstDayOfWeek
、getMinimalDaysInFirstWeek
和 getTimeZone
方法表示的值。若是在兩個 Calendar
之間這些參數中存在任何不一樣之處,則此方法返回 false
。
使用 compareTo
方法來僅對時間值進行比較。
obj
- 要與之比較的對象。
obj
,則返回
true
;不然返回
false
。
Object.hashCode()
,
Hashtable
public int hashCode()
Object.equals(java.lang.Object)
,
Hashtable
public boolean before(Object when)
Calendar
表示的時間是否在指定
Object
表示的時間以前,返回判斷結果。此方法等效於:
compareTo(when) < 0當且僅當
when
是一個
Calendar
實例時才返回 true。不然該方法返回
false
。
when
- 要比較的
Object
Calendar
的時間在
when
表示的時間以前,則返回
true
;不然返回
false
。
compareTo(Calendar)
public boolean after(Object when)
Calendar
表示的時間是否在指定
Object
表示的時間以後,返回判斷結果。此方法等效於:
compareTo(when) > 0當且僅當
when
是一個
Calendar
實例時才返回 true。不然該方法返回
false
。
when
- 要比較的
Object
Calendar
的時間在
when
表示的時間以後,則返回
true
;不然返回
false
。
compareTo(Calendar)
public int compareTo(Calendar anotherCalendar)
Calendar
對象表示的時間值(從
曆元至如今的毫秒偏移量)。
Comparable<Calendar>
中的
compareTo
anotherCalendar
- 要比較的
Calendar
。
Calendar
表示的時間,則返回
0
值;若是此
Calendar
的時間在參數表示的時間以前,則返回小於
0
的值;若是此
Calendar
的時間在參數表示的時間以後,則返回大於
0
的值。
NullPointerException
- 若是指定的
Calendar
爲
null
。
IllegalArgumentException
- 若是由於無效的日曆值而沒法得到指定
Calendar
對象的時間值。
public abstract void add(int field, int amount)
add(Calendar.DAY_OF_MONTH, -5)
。
field
- 日曆字段。
amount
- 爲字段添加的日期或時間量。
roll(int,int)
,
set(int,int)
public abstract void roll(int field, boolean up)
roll(Calendar.DATE, true)。在 year 或 Calendar.YEAR 字段上滾動時,將在從 1 到調用 getMaximum(Calendar.YEAR)
的返回值之間的範圍內滾動 year 值。在 month 或 Calendar.MONTH 字段上滾動時,其餘字段(如 date)可能發生衝突,所以須要更改它們。例如,在日期 01/31/96 上滾動 month 將產生 02/29/96 的日期。在 hour-in-day 或 Calendar.HOUR_OF_DAY 字段上滾動時,小時值會在 0 到 23 之間的範圍內滾動,它是基於 0 的。
field
- 時間字段。
up
- 指示指定時間字段的值是向上滾動仍是向下滾動。若是向上滾動,則使用 true,不然使用 false。
add(int,int)
,
set(int,int)
public void roll(int field, int amount)
注:Calendar
上的此默認實現只是重複地調用滾動一個單元的 roll()
版本。這可能並不是老是正確的。例如,若是 DAY_OF_MONTH
字段爲 31,則在 February 的範圍內滾動會將它設置爲 28。此函數的 GregorianCalendar
版本會當心地處理這個問題。其餘子類還應該提供此函數的重寫版本,以正確實現該功能。
field
- 日曆字段。
amount
- 要添加到日曆
field
中的有符號時間量。
roll(int,boolean)
,
add(int,int)
,
set(int,int)
public void setTimeZone(TimeZone value)
value
- 給定的時區。
public TimeZone getTimeZone()
public void setLenient(boolean lenient)
lenient
- 若是開啓 lenient 模式,則爲
true
;若是關閉此模式,則爲
false
。
isLenient()
,
DateFormat.setLenient(boolean)
public boolean isLenient()
true
;不然返回
false
。
setLenient(boolean)
public void setFirstDayOfWeek(int value)
SUNDAY
,而在法國,這一天是
MONDAY
。
value
- 給出的一星期的第一天。
getFirstDayOfWeek()
,
getMinimalDaysInFirstWeek()
public int getFirstDayOfWeek()
SUNDAY
,而在法國,這一天是
MONDAY
。
setFirstDayOfWeek(int)
,
getMinimalDaysInFirstWeek()
public void setMinimalDaysInFirstWeek(int value)
value
- 一年中第一個星期所需的給定最少天數。
getMinimalDaysInFirstWeek()
public int getMinimalDaysInFirstWeek()
setMinimalDaysInFirstWeek(int)
public abstract int getMinimum(int field)
Calendar
實例給定日曆字段的最小值。最小值被定義爲
get
方法爲任何可能時間值返回的最小值。最小值取決於日曆系統實例的特定參數。
field
- 日曆字段。
getMaximum(int)
,
getGreatestMinimum(int)
,
getLeastMaximum(int)
,
getActualMinimum(int)
,
getActualMaximum(int)
public abstract int getMaximum(int field)
Calendar
實例給定日曆字段的最大值。最大值被定義爲
get
方法爲任何可能時間值返回的最大值。最大值取決於日曆系統實例的特定參數。
field
- 日曆字段。
getMinimum(int)
,
getGreatestMinimum(int)
,
getLeastMaximum(int)
,
getActualMinimum(int)
,
getActualMaximum(int)
public abstract int getGreatestMinimum(int field)
Calendar
實例給定日曆字段的最高的最小值。最高的最小值被定義爲
getActualMinimum(int)
方法爲任何可能時間值返回的最大值。最高的最小值取決於日曆系統實例的特定參數。
field
- 日曆字段。
getMinimum(int)
,
getMaximum(int)
,
getLeastMaximum(int)
,
getActualMinimum(int)
,
getActualMaximum(int)
public abstract int getLeastMaximum(int field)
Calendar
實例給定日曆字段的最低的最大值。最低的最大值被定義爲
getActualMaximum(int)
方法爲任何可能時間值返回的最小值。最低的最大值取決於日曆系統實例的特定參數。例如,對於格里高利曆系統,
Calendar
將爲
DAY_OF_MONTH
字段返回 28,由於第 28 天是該日曆最短那個月的最後一天,即普通年的二月。
field
- 日曆字段。
getMinimum(int)
,
getMaximum(int)
,
getGreatestMinimum(int)
,
getActualMinimum(int)
,
getActualMaximum(int)
public int getActualMinimum(int field)
Calendar
的時間值,返回指定日曆字段可能擁有的最小值。
此方法的默認實現使用了一個迭代算法來肯定日曆字段的實際最小值。若是可能的話,子類應該使用更有效的實現來重寫此方法——在許多狀況下,它們只是簡單地返回 getMinimum()
。
field
- 日曆字段
Calendar
的時間值而言,給定日曆字段的最小值
getMinimum(int)
,
getMaximum(int)
,
getGreatestMinimum(int)
,
getLeastMaximum(int)
,
getActualMaximum(int)
public int getActualMaximum(int field)
Calendar
的時間值,返回指定日曆字段可能擁有的最大值。例如,在某些年份中,
MONTH
字段的實際最大值是 12,而在希伯來日曆系統的其餘年份中,該字段的實際最大值是 13。
此方法的默認實現使用了一個迭代算法來肯定日曆字段的實際最大值。若是有可能的話,子類應該使用一個更有效的實現來重寫此方法。
field
- 日曆字段
Calendar
的時間值而言,給定日曆字段的最大值
getMinimum(int)
,
getMaximum(int)
,
getGreatestMinimum(int)
,
getLeastMaximum(int)
,
getActualMaximum(int)
public Object clone()
public String toString()