/*
* @author
* 2005-12-14
*/
Calendar calendar = Calendar.getInstance();
//getTime()方法是取得當前的日期,其返回值是一個java.util.Date類的對象
res.setResOpenDate(calendar.getTime());
int day = calendar.get(Calendar.DAY_OF_YEAR);
calendar.set(Calendar.DAY_OF_YEAR, day + 30);
//投票的有效期30天
res.setResEndDate(calendar.getTime());
² 詳細說明
⑴Calendar是java.util.* 中的一個類,所以在使用前,我們要導入包java.util.*;
//產生一個日歷類的對象,我們不能使用new Calendar()來構造實例,因為//Calendar的構造函數都是protected,也就是說,構造函數是保護成員。
⑵關於Calendar的Filed
在Calendar中定義了日歷的各個成員,比如:年,月,日,包括不同的記錄方法,比如:同一天(2005-12-14)來說,在記錄的時候,我們可以 說是一周中的周三,是12月的第14天,是2005年的第****(你可以自己算一下)天。這就是不同的記錄方法,所以在Calendar中就有了不同的 定義:
public final static int ERA = 0;
public final static int YEAR = 1;
public final static int MONTH = 2;
public final static int WEEK_OF_YEAR = 3;
public final static int WEEK_OF_MONTH = 4;
public final static int DATE = 5;
public final static int DAY_OF_MONTH = 5;
public final static int DAY_OF_YEAR = 6;
public final static int DAY_OF_WEEK = 7;
public final static int DAY_OF_WEEK_IN_MONTH = 8;
public final static int AM_PM = 9;
public final static int HOUR = 10;
public final static int HOUR_OF_DAY = 11;
public final static int MINUTE = 12;
public final static int SECOND = 13;
這些定義是不同記錄方法的標識,在此我沒有列舉完全,感興趣的話你可以看一下Calendar的源代碼。
這些就是Calendar的Field,根據你的不同需求就可以去處不同的Field,不同的記錄方法也是不同的的Filed,這樣應該是好理解一些。
有了這些,我們就可以取得你想要的任何需要的東西了,如果你想知道今天是一年中的哪一天,就可以用:
int day = calendar.get(Calendar.DAY_OF_YEAR);
參數就是你想取得的Field,所有的這些都在Calendar中定義好了。
結果會告訴我們2005-12-14是2005年的第348天。
然后你想知道30天后是幾號呢?
calendar.set(Calendar.DAY_OF_YEAR, day + 30);
在這,你不需要去考慮12-14號加上30天是一月,是不是會出錯,不會的,Calendar自己知道那一天是幾月幾號。
方法
getInstance
public static synchronized Calendar getInstance()
-
用缺省時區和語言環境獲得一個日歷。
-
- 返回值:
- 一個 Calendar。
getInstance
public static synchronized Calendar getInstance(TimeZone zone)
-
用給定時區和缺省語言環境獲得一個日歷。
-
- 參數:
- zone - 給定的時區。
- 返回值:
- 一個 Calendar。
getInstance
public static synchronized Calendar getInstance(Locale aLocale)
-
用缺省時區和給定語言環境獲得一個日歷。
-
- 參數:
- aLocale - 給定的語言環境。
- 返回值:
- 一個 Calendar。
getInstance
public static synchronized Calendar getInstance(TimeZone zone,
Locale aLocale)
-
用給定時區和給定語言環境獲得一個日歷。
-
- 參數:
- zone - 給定的時區。
- aLocale - 給定的語言環境。
- 返回值:
- 一個 Calendar。
getAvailableLocales
public static synchronized Locale[] getAvailableLocales()
-
獲得安裝 Calendars 的語言環境集合。
-
- 返回值:
- 安裝 Calendars 的語言環境集合。
computeTime
protected abstract void computeTime()
-
將日歷的時間域作為毫秒值轉換為 UTC。
computeFields
protected abstract void computeFields()
-
將 UTC 作為毫秒值轉換為時間域值。 允許使時間域值與日歷設置的新時間同步。 開始
不重新計算該時間;為了重新計算時間和域,調用
complete
方法。 -
- 參見:
- complete
getTime
public final Date getTime()
-
獲得日歷的當前時間。
-
- 返回值:
- 當前的時間。
setTime
public final void setTime(Date date)
-
用給定的 Date 設置 Calendar 的當前時間。
-
- 參數:
- date - 給定的 Date。
getTimeInMillis
protected long getTimeInMillis()
-
獲得日歷的作為長整型的當前時間。
-
- 返回值:
- 當前時間,作為從開始時間的 UTC 毫秒值。
setTimeInMillis
protected void setTimeInMillis(long millis)
-
用給定的長整數設置 Calendar 的當前時間。
-
- 參數:
- date - 新時間,從開始時間的 UTC 毫秒時間。
get
public final int get(int field)
-
獲得給定時間域的值。
-
- 參數:
- field - 給定的時間域。
- 返回值:
- 給定的時間域值。
internalGet
protected final int internalGet(int field)
-
獲取給定時間域的值。 這是子類的一個內部快速時間域值 getter。
-
- 參數:
- field - 給定的時間域。
- 返回值:
- 給定的時間域值。
set
public final void set(int field,
int value)
-
用給定的值設置時間域。
-
- 參數:
- field - 給定的時間域。
- value - 要設置的給定時間域的值。
set
public final void set(int year,
int month,
int date)
-
設置年、月、日期域的數值。 保留其它域上次的值。 如果不需要保留,首先調用
clear
。 -
- 參數:
- year - 用於設置 YEAR 時間域的值。
- month - 用於設置 MONTH 時間域的值。 Month 值以 0 開始。 例如,0 代表一月。
- date - 用於設置 DATE 時間域的值。
set
public final void set(int year,
int month,
int date,
int hour,
int minute)
-
設置年、月、日期、時和分域的數值。 保留其它域上次的值。 如果不需要保留,首先調用
clear
。 -
- 參數:
- year - 用於設置 YEAR 時間域的值。
- month - 用於設置 MONTH 時間域的值。 Month 值以 0 開始。 例如,0 代表一月。
- date - 用於設置 DATE 時間域的值。
- hour - 用於設置 HOUR 時間域的值。
- minute - 用於設置 MINUTE 時間域的值。
set
public final void set(int year,
int month,
int date,
int hour,
int minute,
int second)
-
設置年、月、日期、時、分和秒域的數值。 保留其它域上次的值。 如果不需要保留,首先調用
clear
。 -
- 參數:
- year - 用於設置 YEAR 時間域的值。
- month - 用於設置 MONTH 時間域的值。 Month 值以 0 開始。 例如,0 代表一月。
- date - 用於設置 DATE 時間域的值。
- hour - 用於設置 HOUR 時間域的值。
- minute - 用於設置 MINUTE 時間域的值。
- second - 用於設置 SECOND 時間域的值。
clear
public final void clear()
-
將所有時間域值清零。
clear
public final void clear(int field)
-
將給定的時間域值清零。
-
- 參數:
- field - 要清零的時間域。
isSet
public final boolean isSet(int field)
-
確定給定的時間域是否設置了數值。
-
- 返回值:
- 如果給定的時間域設置了數值則返回 true;否則返回 false。
complete
protected void complete()
-
填充時間域列表中所有未設置的域。
equals
public abstract boolean equals(Object obj)
-
比較該日歷和指定的對象。 當且僅當參數不為
null
而是與該對象描述同一日歷的Calendar
對象,結果為true
。 -
- 參數:
- obj - 比較的對象。
- 返回值:
-
如果對象相同則為
true
,否則為false
。 - 覆蓋:
- 類 Object 中的 equals
before
public abstract boolean before(Object when)
-
比較時間域記錄。 等價於比較轉換到 UTC 的結果。
-
- 參數:
- when - 與該 Calendar 比較的 Calendar。
- 返回值:
- 如果當前時間在 Calendar when 的時間之前則為 true;否則為 false。
after
public abstract boolean after(Object when)
-
比較時間域記錄。 等價於比較轉換到 UTC 的結果。
-
- 參數:
- when - 與該 Calendar 比較的 Calendar。
- 返回值:
- 如果該日歷的當前時間在 Calendar when 的時間之后則為 true;否則為 false。
add
public abstract void add(int field,
int amount)
-
日期的計算功能。 按照日歷的規則,將指定 ( 帶符號的 ) 數量的時間添加到給定的時間域。 例如,從日歷的當前時間減 5 ,可調用:
add(Calendar.DATE, -5)。
-
- 參數:
- field - 時間域。
- amount - 添加到該域的日期和時間的數量。
roll
public abstract void roll(int field,
boolean up)
-
時間域滾動功能。 在給定的時間域上 ( 向上 / 向下 ) 滾動一個單個的時間單元。 例如,為了將當前日期向上滾動一天,可調用:
roll(Calendar.DATE, true)。 當在年或 Calendar.YEAR 域滾動時,年值將在 1 和調用 getMaximum(Calendar.YEAR) 的返回值之間滾動。 當在月或 Calendar.MONTH 域滾動時,其它的域,例如日期,可能會發生沖突需要改變。 例如,將日期 01/31/96 滾動一月結果是 03/02/96。 當在小時域或 Calendar.HOUR_OF_DAY 域滾動,小時值將在范圍 0 到 23 之間滾動,它以 0 開始。
-
- 參數:
- field - 時間域。
- up - 指明指定時間域值向上還是向下滾動。 如果向上滾動用 true ,否則用 false。
setTimeZone
public void setTimeZone(TimeZone value)
-
用給定的時區值設置時區。
-
- 參數:
- value - 給定的時區。
getTimeZone
public TimeZone getTimeZone()
-
獲得時區。
-
- 返回值:
- 與日歷相應的時區對象。
setLenient
public void setLenient(boolean lenient)
-
指明對日期/時間的解釋是否是寬松的。 在寬松的解釋下,一個諸如 "February 942, 1996" 的日期將被看作與1996 年 2 月后的第 941 天等價。 在嚴格的解釋下,這樣的日期將引起拋出異常。
-
- 參見:
- setLenient
isLenient
public boolean isLenient()
-
指明對日期/時間的解釋是否是寬松的。
setFirstDayOfWeek
public void setFirstDayOfWeek(int value)
-
設置一周的第一天;例如在美國為 Sunday,在法國為 Monday。
-
- 參數:
- value - 一周給定的第一天。
getFirstDayOfWeek
public int getFirstDayOfWeek()
-
獲得一周的第一天;例如在美國為 Sunday,在法國為 Monday。
-
- 返回值:
- 一周的第一天。
setMinimalDaysInFirstWeek
public void setMinimalDaysInFirstWeek(int value)
-
設置該年中第一個星期所需要的最少的天數,例如,如果定義第一個星期包含一年第一個月的第一天,用值 1 調用該方法。如果它必須是一個完整的星期,使用 7 調用該方法。
-
- 參數:
- value - 給定的一年中第一個星期要求的最少天數。
getMinimalDaysInFirstWeek
public int getMinimalDaysInFirstWeek()
-
獲得該年中第一個星期所需要的最少的天數,例如,如果第一個星期定義為包含一年第一個月的第一天,getMinimalDaysInFirstWeek 返回 1。如果要求的最少天數必須是一個完整的星期,getMinimalDaysInFirstWeek 返回 7。
-
- 返回值:
- 一年中第一個星期要求的最少天數。
getMinimum
public abstract int getMinimum(int field)
-
獲得給定時間域最小值。 例如對於格里高里 DAY_OF_MONTH 為 1。
-
- 參數:
- field - 給定的時間域。
- 返回值:
- 給定時間域最小值。
getMaximum
public abstract int getMaximum(int field)
-
獲得給定時間域最大值。 例如對於 Gregorian DAY_OF_MONTH 為 31。
-
- 參數:
- field - 給定的時間域。
- 返回值:
- 給定時間域最大值。
getGreatestMinimum
public abstract int getGreatestMinimum(int field)
-
獲得給定域變化時的最高的最小值。 否則與 getMinimum() 相同。對格里高里日歷沒有區別。
-
- 參數:
- field - 給定的時間域。
- 返回值:
- 給定時間域最高的最小值。
getLeastMaximum
public abstract int getLeastMaximum(int field)
-
獲得給定域變化時的最低的最大值。 否則與 getMaximum() 相同。例如對於格里高里日歷 DAY_OF_MONTH 為 28。
-
- 參數:
- field - 給定的時間域。
- 返回值:
- 定時間域最低的最大值。
clone
public Object clone()
-
覆蓋 Cloneable
-
- 覆蓋:
- 類 Object 中的 clone
toString
public String toString()
-
返回日歷的字符串表示。
-
- 返回值:
- 日歷的字符串表示。
- 覆蓋:
- 類 Object 中的 toString