鴻蒙OS GregorianCalendar

2022-07-21 14:40 更新

GregorianCalendar

java.lang.Object

|---java.util.Calendar

|---|---java.util.GregorianCalendar

public class GregorianCalendar
extends Calendar

GregorianCalendar 是 Calendar 的一個具體子類,并提供世界上大多數(shù)地方使用的標準日歷系統(tǒng)。

GregorianCalendar 是一種混合日歷,它同時支持儒略歷和公歷系統(tǒng),并支持單個不連續(xù)性,默認情況下對應于公歷制定時的公歷日期(在某些國家/地區(qū)為 1582 年 10 月 15 日,在其他國家/地區(qū)較晚)。 調用者可以通過調用 setGregorianChange() 來更改切換日期。

從歷史上看,在那些首先采用公歷的國家中,1582 年 10 月 4 日(儒略歷)隨后是 1582 年 10 月 15 日(公歷)。 這個日歷正確地模擬了這一點。 在公歷轉換之前,GregorianCalendar 實現(xiàn)了儒略歷。 公歷和儒略歷之間的唯一區(qū)別是閏年規(guī)則。 儒略歷每四年指定閏年,而公歷省略不能被 400 整除的世紀年。

GregorianCalendar 實現(xiàn)了預測的公歷和儒略歷。 也就是說,日期是通過無限期地向后和向前推斷當前規(guī)則來計算的。 因此,GregorianCalendar 可用于所有年份以生成有意義且一致的結果。 然而,使用 GregorianCalendar 獲得的日期僅在公元 4 年 3 月 1 日之后才具有歷史準確度,當時采用了現(xiàn)代儒略歷規(guī)則。 在此日期之前,閏年規(guī)則的應用不規(guī)律,而在公元前 45 年之前,儒略歷甚至都不存在。

在公歷制度制定之前,元旦是 3 月 25 日。為避免混淆,此日歷始終使用 1 月 1 日。如果需要,可以手動調整公歷轉換之前的日期和 1 月 1 日之間的日期 和 3 月 24 日。

一年中的一周和一周年

為 Calendar#WEEK_OF_YEAR 字段計算的值范圍為 1 到 53。日歷年的第一周是從 Calendar#getFirstDayOfWeek() 開始的最早的 7 天時間段,其中至少包含該年的 Calendar#getMinimalDaysInFirstWeek() 天。 因此,它取決于 getMinimalDaysInFirstWeek()、getFirstDayOfWeek() 和 1 月 1 日的星期幾的值。一年的第 1 周和下一年的第 1 周(不包括)之間的周數(shù)從 2 到 52 或 53 年(儒略-格里高利過渡所涉及的年份除外)。

getFirstDayOfWeek() 和 getMinimalDaysInFirstWeek() 值在構造 GregorianCalendar 時使用與語言環(huán)境相關的資源進行初始化。當 getFirstDayOfWeek() 為 MONDAY 且 getMinimalDaysInFirstWeek() 為 4 時,星期確定與 ISO 8601 標準兼容,這些值用于首選標準的區(qū)域設置。這些值可以通過調用 Calendar#setFirstDayOfWeek(int) 和 Calendar#setMinimalDaysInFirstWeek(int) 顯式設置。

一周年與 WEEK_OF_YEAR 周期同步。第一周和最后一周(含)之間的所有周都具有相同的周年值。因此,一周年的第一天和最后一天可能具有不同的日歷年值。

例如,1998 年 1 月 1 日是星期四。如果 getFirstDayOfWeek() 為 MONDAY 且 getMinimalDaysInFirstWeek() 為 4(ISO 8601 標準兼容設置),則 1998 年的第 1 周開始于 1997 年 12 月 29 日,結束于 1998 年 1 月 4 日。最后三天的周年份為 1998 年1997 日歷年。但是,如果 getFirstDayOfWeek() 是 SUNDAY,則 1998 年的第 1 周從 1998 年 1 月 4 日開始,到 1998 年 1 月 10 日結束; 1998 年的前三天是 1997 年第 53 周的一部分,他們的周年是 1997 年。

每月的一周

為 WEEK_OF_MONTH 字段計算的值范圍為 0 到 6。一個月的第 1 周(WEEK_OF_MONTH = 1 的天數(shù))是該月中至少 getMinimalDaysInFirstWeek() 連續(xù)天數(shù)的最早集合,在 getFirstDayOfWeek() 之前的一天結束。 與一年的第 1 周不同,一個月的第 1 周可能短于 7 天,不需要從 getFirstDayOfWeek() 開始,并且不包括上個月的天數(shù)。 第 1 周前一個月的某天的 WEEK_OF_MONTH 為 0。

例如,如果 getFirstDayOfWeek() 是 SUNDAY,getMinimalDaysInFirstWeek() 是 4,則 1998 年 1 月的第一周是 1 月 4 日星期日到 1 月 10 日星期六。這些天的 WEEK_OF_MONTH 為 1。1 月 1 日星期四到 1 月星期六 3 的 WEEK_OF_MONTH 為 0。如果將 getMinimalDaysInFirstWeek() 更改為 3,則 1 月 1 日至 1 月 3 日的 WEEK_OF_MONTH 為 1。

默認字段值

clear 方法將日歷字段設置為未定義。 如果每個日歷字段的值未定義,GregorianCalendar 將使用以下默認值。

默認值不適用于上面未列出的字段。

例子:

 // get the supported ids for GMT-08:00 (Pacific Standard Time)
 String[] ids = TimeZone.getAvailableIDs(-8 * 60 * 60 * 1000);
 // if no ids were returned, something is wrong. get out.
 if (ids.length == 0)
     System.exit(0);


  // begin output
 System.out.println("Current Time");


 // create a Pacific Standard Time time zone
 SimpleTimeZone pdt = new SimpleTimeZone(-8 * 60 * 60 * 1000, ids[0]);


 // set up rules for Daylight Saving Time
 pdt.setStartRule(Calendar.APRIL, 1, Calendar.SUNDAY, 2 * 60 * 60 * 1000);
 pdt.setEndRule(Calendar.OCTOBER, -1, Calendar.SUNDAY, 2 * 60 * 60 * 1000);


 // create a GregorianCalendar with the Pacific Daylight time zone
 // and the current date and time
 Calendar calendar = new GregorianCalendar(pdt);
 Date trialTime = new Date();
 calendar.setTime(trialTime);


 // print out a bunch of interesting things
 System.out.println("ERA: " + calendar.get(Calendar.ERA));
 System.out.println("YEAR: " + calendar.get(Calendar.YEAR));
 System.out.println("MONTH: " + calendar.get(Calendar.MONTH));
 System.out.println("WEEK_OF_YEAR: " + calendar.get(Calendar.WEEK_OF_YEAR));
 System.out.println("WEEK_OF_MONTH: " + calendar.get(Calendar.WEEK_OF_MONTH));
 System.out.println("DATE: " + calendar.get(Calendar.DATE));
 System.out.println("DAY_OF_MONTH: " + calendar.get(Calendar.DAY_OF_MONTH));
 System.out.println("DAY_OF_YEAR: " + calendar.get(Calendar.DAY_OF_YEAR));
 System.out.println("DAY_OF_WEEK: " + calendar.get(Calendar.DAY_OF_WEEK));
 System.out.println("DAY_OF_WEEK_IN_MONTH: "
                    + calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH));
 System.out.println("AM_PM: " + calendar.get(Calendar.AM_PM));
 System.out.println("HOUR: " + calendar.get(Calendar.HOUR));
 System.out.println("HOUR_OF_DAY: " + calendar.get(Calendar.HOUR_OF_DAY));
 System.out.println("MINUTE: " + calendar.get(Calendar.MINUTE));
 System.out.println("SECOND: " + calendar.get(Calendar.SECOND));
 System.out.println("MILLISECOND: " + calendar.get(Calendar.MILLISECOND));
 System.out.println("ZONE_OFFSET: "
                    + (calendar.get(Calendar.ZONE_OFFSET)/(60*60*1000)));
 System.out.println("DST_OFFSET: "
                    + (calendar.get(Calendar.DST_OFFSET)/(60*60*1000)));

 
 System.out.println("Current Time, with hour reset to 3");
 calendar.clear(Calendar.HOUR_OF_DAY); // so doesn't override
 calendar.set(Calendar.HOUR, 3);
 System.out.println("ERA: " + calendar.get(Calendar.ERA));
 System.out.println("YEAR: " + calendar.get(Calendar.YEAR));
 System.out.println("MONTH: " + calendar.get(Calendar.MONTH));
 System.out.println("WEEK_OF_YEAR: " + calendar.get(Calendar.WEEK_OF_YEAR));
 System.out.println("WEEK_OF_MONTH: " + calendar.get(Calendar.WEEK_OF_MONTH));
 System.out.println("DATE: " + calendar.get(Calendar.DATE));
 System.out.println("DAY_OF_MONTH: " + calendar.get(Calendar.DAY_OF_MONTH));
 System.out.println("DAY_OF_YEAR: " + calendar.get(Calendar.DAY_OF_YEAR));
 System.out.println("DAY_OF_WEEK: " + calendar.get(Calendar.DAY_OF_WEEK));
 System.out.println("DAY_OF_WEEK_IN_MONTH: "
                    + calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH));
 System.out.println("AM_PM: " + calendar.get(Calendar.AM_PM));
 System.out.println("HOUR: " + calendar.get(Calendar.HOUR));
 System.out.println("HOUR_OF_DAY: " + calendar.get(Calendar.HOUR_OF_DAY));
 System.out.println("MINUTE: " + calendar.get(Calendar.MINUTE));
 System.out.println("SECOND: " + calendar.get(Calendar.SECOND));
 System.out.println("MILLISECOND: " + calendar.get(Calendar.MILLISECOND));
 System.out.println("ZONE_OFFSET: "
        + (calendar.get(Calendar.ZONE_OFFSET)/(60*60*1000))); // in hours
 System.out.println("DST_OFFSET: "
        + (calendar.get(Calendar.DST_OFFSET)/(60*60*1000))); // in hours

嵌套類摘要

從類 java.util.Calendar 繼承的嵌套類/接口
Calendar.Builder

字段摘要

修飾符和類型 字段 描述
static int AD 指示共同時代(Anno Domini)的 ERA 字段的值,也稱為 CE。
static int BC ERA 字段的值表示普通時代(基督之前)之前的時期,也稱為 BCE。
從類 java.util.Calendar 繼承的字段
ALL_STYLES, AM, AM_PM, APRIL, areFieldsSet, AUGUST, DATE, DAY_OF_MONTH, DAY_OF_WEEK, DAY_OF_WEEK_IN_MONTH, DAY_OF_YEAR, DECEMBER, DST_OFFSET, ERA, FEBRUARY, FIELD_COUNT, fields, FRIDAY, HOUR, HOUR_OF_DAY, isSet, isTimeSet, JANUARY, JULY, JUNE, LONG, LONG_FORMAT, LONG_STANDALONE, MARCH, MAY, MILLISECOND, MINUTE, MONDAY, MONTH, NARROW_FORMAT, NARROW_STANDALONE, NOVEMBER, OCTOBER, PM, SATURDAY, SECOND, SEPTEMBER, SHORT, SHORT_FORMAT, SHORT_STANDALONE, SUNDAY, THURSDAY, time, TUESDAY, UNDECIMBER, WEDNESDAY, WEEK_OF_MONTH, WEEK_OF_YEAR, YEAR, ZONE_OFFSET

構造函數(shù)摘要

構造函數(shù) 描述
GregorianCalendar() 使用默認時區(qū)中的當前時間和默認 Locale.Category#FORMAT 語言環(huán)境構造默認 GregorianCalendar。
GregorianCalendar(int year, int month, int dayOfMonth) 構造一個 GregorianCalendar,其給定日期設置在默認時區(qū)和默認語言環(huán)境中。
GregorianCalendar(int year, int month, int dayOfMonth, int hourOfDay, int minute) 構造一個帶有給定日期和時間的 GregorianCalendar,該日期和時間設置為具有默認語言環(huán)境的默認時區(qū)。
GregorianCalendar(int year, int month, int dayOfMonth, int hourOfDay, int minute, int second) 構造一個帶有給定日期和時間的 GregorianCalendar,該日期和時間設置為具有默認語言環(huán)境的默認時區(qū)。
GregorianCalendar(Locale aLocale) 根據(jù)給定語言環(huán)境的默認時區(qū)中的當前時間構造一個 GregorianCalendar。
GregorianCalendar(TimeZone zone) 使用默認 Locale.Category#FORMAT 區(qū)域設置基于給定時區(qū)中的當前時間構造 GregorianCalendar。
GregorianCalendar(TimeZone zone, Locale aLocale) 根據(jù)給定區(qū)域設置的給定時區(qū)中的當前時間構造一個 GregorianCalendar。

方法總結

修飾符和類型 方法 描述
void add(int field, int amount) 根據(jù)日歷的規(guī)則,將指定(簽名)的時間量添加到給定的日歷字段。
Object clone() 創(chuàng)建并返回此對象的副本。
protected void computeFields() 將時間值(從 Epoch 的毫秒偏移量)轉換為日歷字段值。
protected void computeTime() 將日歷字段值轉換為時間值(從 Epoch 開始的毫秒偏移量)。
boolean equals(Object obj) 將此 GregorianCalendar 與指定的 Object 進行比較。
static GregorianCalendar from(ZonedDateTime zdt) 從 ZonedDateTime 對象獲取具有默認語言環(huán)境的 GregorianCalendar 實例。
int getActualMaximum(int field) 返回此日歷字段可能具有的最大值,同時考慮給定的時間值和 Calendar#getFirstDayOfWeek()、Calendar#getMinimalDaysInFirstWeek()、getGregorianChange 和 Calendar#getTimeZone() 方法的當前值。
int getActualMinimum(int field) 返回此日歷字段可能具有的最小值,同時考慮給定的時間值和 Calendar#getFirstDayOfWeek()、Calendar#getMinimalDaysInFirstWeek()、getGregorianChange 和 Calendar#getTimeZone() 方法的當前值。
String getCalendarType() 返回“gregory”作為日歷類型。
int getGreatestMinimum(int field) 返回此 GregorianCalendar 實例的給定日歷字段的最大最小值。
Date getGregorianChange() 獲取公歷更改日期。
int getLeastMaximum(int field) 返回此 GregorianCalendar 實例的給定日歷字段的最低最大值。
int getMaximum(int field) 返回此 GregorianCalendar 實例的給定日歷字段的最大值。
int getMinimum(int field) 返回此 GregorianCalendar 實例的給定日歷字段的最小值。
TimeZone getTimeZone() 獲取時區(qū)。
int getWeeksInWeekYear() 返回此 GregorianCalendar 表示的一周年中的周數(shù)。
int getWeekYear() 返回此 GregorianCalendar 表示的周年。
int hashCode() 生成此 GregorianCalendar 對象的哈希碼。
boolean isLeapYear(int year) 確定給定年份是否為閏年。
boolean isWeekDateSupported() 返回 true 表示此 GregorianCalendar 支持星期日期。
void roll(int field, boolean up) 在給定時間字段上添加或減去(上/下)單個時間單位,而不更改更大的字段。
void roll(int field, int amount) 將簽名金額添加到指定的日歷字段而不更改更大的字段。
void setGregorianChange(Date date) 設置 GregorianCalendar 更改日期。
void setTimeZone(TimeZone zone) 使用給定的時區(qū)值設置時區(qū)。
void setWeekDate(int weekYear, int weekOfYear, int dayOfWeek) 將此 GregorianCalendar 設置為日期說明符給出的日期 - weekYear、weekOfYear 和 dayOfWeek。
ZonedDateTime toZonedDateTime() 將此對象轉換為 ZonedDateTime,它表示時間線上與此 GregorianCalendar 相同的點。
從類 java.util.Calendar 繼承的方法
after, before, clear, clear, compareTo, complete, get, getAvailableCalendarTypes, getAvailableLocales, getDisplayName, getDisplayNames, getFirstDayOfWeek, getInstance, getInstance, getInstance, getInstance, getMinimalDaysInFirstWeek, getTime, getTimeInMillis, internalGet, isLenient, isSet, set, set, set, set, setFirstDayOfWeek, setLenient, setMinimalDaysInFirstWeek, setTime, setTimeInMillis, toInstant, toString
從類 java.lang.Object 繼承的方法
finalize, getClass, notify, notifyAll, wait, wait, wait

字段詳細信息

AD

public static final int AD

指示共同時代(Anno Domini)的 ERA 字段的值,也稱為 CE。 從公元前到公元過渡的年份順序是......,公元前2年,公元前1年,公元1年,公元2年,......

BC

public static final int BC

ERA 字段的值表示普通時代(基督之前)之前的時期,也稱為 BCE。 從公元前到公元過渡的年份順序是......,公元前2年,公元前1年,公元1年,公元2年,......

構造函數(shù)詳細信息

GregorianCalendar

public GregorianCalendar()

使用默認時區(qū)中的當前時間和默認 Locale.Category#FORMAT 語言環(huán)境構造默認 GregorianCalendar。

GregorianCalendar

public GregorianCalendar(TimeZone zone)

使用默認 Locale.Category#FORMAT 區(qū)域設置基于給定時區(qū)中的當前時間構造 GregorianCalendar。

參數(shù):

參數(shù)名稱 參數(shù)描述
zone 給定的時區(qū)。

GregorianCalendar

public GregorianCalendar(Locale aLocale)

根據(jù)給定語言環(huán)境的默認時區(qū)中的當前時間構造一個 GregorianCalendar。

參數(shù):

參數(shù)名稱 參數(shù)描述
aLocale 給定的語言環(huán)境。

GregorianCalendar

public GregorianCalendar(TimeZone zone, Locale aLocale)

根據(jù)給定區(qū)域設置的給定時區(qū)中的當前時間構造一個 GregorianCalendar。

參數(shù):

參數(shù)名稱 參數(shù)描述
zone 給定的時區(qū)。
aLocale 給定的語言環(huán)境。

GregorianCalendar

public GregorianCalendar(int year, int month, int dayOfMonth)

構造一個 GregorianCalendar,其給定日期設置在默認時區(qū)和默認語言環(huán)境中。

參數(shù):

參數(shù)名稱 參數(shù)描述
year 用于設置日歷中 YEAR 日歷字段的值。
month 用于設置日歷中 MONTH 日歷字段的值。 月份值從 0 開始。 例如,0 表示一月。
dayOfMonth 用于設置日歷中 DAY_OF_MONTH 日歷字段的值。

GregorianCalendar

public GregorianCalendar(int year, int month, int dayOfMonth, int hourOfDay, int minute)

構造一個帶有給定日期和時間的 GregorianCalendar,該日期和時間設置為具有默認語言環(huán)境的默認時區(qū)。

參數(shù):

參數(shù)名稱 參數(shù)描述
year 用于設置日歷中 YEAR 日歷字段的值。
month 用于設置日歷中 MONTH 日歷字段的值。 月份值從 0 開始。 例如,0 表示一月。
dayOfMonth 用于設置日歷中 DAY_OF_MONTH 日歷字段的值。
hourOfDay 用于設置日歷中 HOUR_OF_DAY 日歷字段的值。
minute 用于設置日歷中 MINUTE 日歷字段的值。

GregorianCalendar

public GregorianCalendar(int year, int month, int dayOfMonth, int hourOfDay, int minute, int second)

構造一個帶有給定日期和時間的 GregorianCalendar,該日期和時間設置為具有默認語言環(huán)境的默認時區(qū)。

參數(shù):

參數(shù)名稱 參數(shù)描述
year 用于設置日歷中 YEAR 日歷字段的值。
month 用于設置日歷中 MONTH 日歷字段的值。 月份值從 0 開始。 例如,0 表示一月。
dayOfMonth 用于設置日歷中 DAY_OF_MONTH 日歷字段的值。
hourOfDay 用于設置日歷中 HOUR_OF_DAY 日歷字段的值。
minute 用于設置日歷中 MINUTE 日歷字段的值。
second 用于在日歷中設置 SECOND 日歷字段的值。

方法詳情

setGregorianChange

public void setGregorianChange(Date date)

設置 GregorianCalendar 更改日期。 這是從儒略日期轉換為公歷日期的時間點。 默認值為 1582 年 10 月 15 日(公歷)。 在此之前,日期將采用儒略歷。

要獲取純儒略歷,請將更改日期設置為 Date(Long.MAX_VALUE)。 要獲取純公歷,請將更改日期設置為 Date(Long.MIN_VALUE)。

參數(shù):

參數(shù)名稱 參數(shù)描述
date 給定的公歷截止日期。

getGregorianChange

public final Date getGregorianChange()

獲取公歷更改日期。 這是從儒略日期轉換為公歷日期的時間點。 默認值為 1582 年 10 月 15 日(公歷)。 在此之前,日期將采用儒略歷。

返回:

此 GregorianCalendar 對象的公歷截止日期。

isLeapYear

public boolean isLeapYear(int year)

確定給定年份是否為閏年。 如果給定年份是閏年,則返回 true。 要指定 BC 年編號,必須給出 1 年編號。 例如,公元前 4 年指定為 -3。

參數(shù):

參數(shù)名稱 參數(shù)描述
year 給定的年份。

返回:

如果給定年份是閏年,則為 true; 否則為 false。

getCalendarType

public String getCalendarType()

返回“gregory”作為日歷類型。

覆蓋:

類 Calendar 中的 getCalendarType

返回:

“gregory”

equals

public boolean equals(Object obj)

將此 GregorianCalendar 與指定的 Object 進行比較。 當且僅當參數(shù)是一個 GregorianCalendar 對象,該對象表示與該對象相同的日歷參數(shù)和公歷更改日期下的相同時間值(從 Epoch 的毫秒偏移量)時,結果才為true。

覆蓋:

等于日歷類

參數(shù):

參數(shù)名稱 參數(shù)描述
obj 比較的對象。

返回:

如果此對象等于 obj,則為 true; 否則為 false。

hashCode

public int hashCode()

生成此 GregorianCalendar 對象的哈希碼。

覆蓋:

類 Calendar 中的 hashCode

返回:

此對象的哈希碼值。

add

public void add(int field, int amount)

根據(jù)日歷的規(guī)則,將指定(簽名)的時間量添加到給定的日歷字段。

添加規(guī)則1。調用后的字段值減去調用前的字段值是金額,以字段中發(fā)生的任何溢出為模。 當字段值超出其范圍時會發(fā)生溢出,因此,下一個較大的字段會遞增或遞減,并且字段值會調整回其范圍內。

增加規(guī)則2,如果一個較小的字段期望是不變的,但是由于字段改變后它的最小值或最大值發(fā)生了變化,使得它不可能等于它的先前值,那么它的值被調整為盡可能接近 可能達到其預期值。 較小的字段表示較小的時間單位。 HOUR 是比 DAY_OF_MONTH 小的字段。 不對預期不會保持不變的較小字段進行任何調整。 日歷系統(tǒng)確定哪些字段預計是不變的。

指定者:

添加日歷類

參數(shù):

參數(shù)名稱 參數(shù)描述
field 日歷字段。
amount 要添加到字段的日期或時間量。

Throws:

Throw名稱 Throw描述
IllegalArgumentException 如果字段是 ZONE_OFFSET、DST_OFFSET 或未知,或者如果任何日歷字段在非寬松模式下具有超出范圍的值。

roll

public void roll(int field, boolean up)

在給定時間字段上添加或減去(上/下)單個時間單位,而不更改更大的字段。

示例:考慮最初設置為 1999 年 12 月 31 日的 GregorianCalendar。調用 roll(Calendar.MONTH, true) 將日歷設置為 1999 年 1 月 31 日。YEAR 字段未更改,因為它比 MONTH 更大。

指定者:

滾動日歷類

參數(shù):

參數(shù)名稱 參數(shù)描述
up 指示指定日歷字段的值是向上滾動還是向下滾動。 如果向上滾動則使用 true,否則使用 false。
field 時間字段。

Throws:

Throw名稱 Throw描述
IllegalArgumentException 如果字段是 ZONE_OFFSET、DST_OFFSET 或未知,或者如果任何日歷字段在非寬松模式下具有超出范圍的值。

roll

public void roll(int field, int amount)

將簽名金額添加到指定的日歷字段而不更改更大的字段。負滾動量意味著從字段中減去而不更改更大的字段。如果指定數(shù)量為 0,則此方法不執(zhí)行任何操作。

此方法在添加金額之前調用 Calendar.complete() 以便對所有日歷字段進行規(guī)范化。如果在非寬松模式下任何日歷字段的值超出范圍,則拋出 IllegalArgumentException。

示例:假設一個 GregorianCalendar 最初設置為 1999 年 8 月 31 日。調用 roll(Calendar.MONTH, 8) 將日歷設置為 1999 年 4 月 30 日。使用 GregorianCalendar,DAY_OF_MONTH 字段在 4 月份不能為 31。 DAY_OF_MONTH 設置為最接近的可能值 30。YEAR 字段保持 1999 的值,因為它比 MONTH 更大。

示例:考慮最初設置為 1999 年 6 月 6 日星期日的 GregorianCalendar。調用 roll(Calendar.WEEK_OF_MONTH, -1) 將日歷設置為 1999 年 6 月 1 日星期二,而調用 add(Calendar.WEEK_OF_MONTH, -1) 將日歷設置為星期日1999 年 5 月 30 日。這是因為滾動規(guī)則施加了額外的約束:滾動 WEEK_OF_MONTH 時,MONTH 不得更改。與添加規(guī)則 1 一起,結果日期必須在 6 月 1 日星期二和 6 月 5 日星期六之間。根據(jù)添加規(guī)則 2,DAY_OF_WEEK 是更改 WEEK_OF_MONTH 時的不變量,設置為星期二,最接近星期日的可能值(其中星期日是一周的第一天)。

覆蓋:

滾動日歷類

參數(shù):

參數(shù)名稱 參數(shù)描述
field 日歷字段。
amount 要添加到字段的簽名金額。

Throws:

Throw名稱 Throw描述
IllegalArgumentException 如果字段是 ZONE_OFFSET、DST_OFFSET 或未知,或者如果任何日歷字段在非寬松模式下具有超出范圍的值。

getMinimum

public int getMinimum(int field)

返回此 GregorianCalendar 實例的給定日歷字段的最小值。 最小值定義為 Calendar#get(int) 方法針對任何可能的時間值返回的最小值,同時考慮到 Calendar#getFirstDayOfWeek()、Calendar#getMinimalDaysInFirstWeek()、getGregorianChange 和 Calendar#getTimeZone 的當前值 () 方法。

指定者:

日歷類中的getMinimum

參數(shù):

參數(shù)名稱 參數(shù)描述
field 日歷字段。

返回:

給定日歷字段的最小值。

getMaximum

public int getMaximum(int field)

返回此 GregorianCalendar 實例的給定日歷字段的最大值。 最大值定義為 Calendar#get(int) 方法針對任何可能的時間值返回的最大值,同時考慮到 Calendar#getFirstDayOfWeek()、Calendar#getMinimalDaysInFirstWeek()、getGregorianChange 和 Calendar#getTimeZone 的當前值 () 方法。

指定者:

日歷類中的getMaximum

參數(shù):

參數(shù)名稱 參數(shù)描述
field 日歷字段。

返回:

給定日歷字段的最大值。

getGreatestMinimum

public int getGreatestMinimum(int field)

返回此 GregorianCalendar 實例的給定日歷字段的最大最小值。 考慮到 Calendar#getFirstDayOfWeek()、Calendar#getMinimalDaysInFirstWeek()、getGregorianChange 和 Calendar#getTimeZone() 方法的當前值,最高最小值定義為 getActualMinimum(int) 針對任何可能的時間值返回的最大值 .

指定者:

日歷類中的getGreatestMinimum

參數(shù):

參數(shù)名稱 參數(shù)描述
field 日歷字段。

返回:

給定日歷字段的最高最小值。

getLeastMaximum

public int getLeastMaximum(int field)

返回此 GregorianCalendar 實例的給定日歷字段的最低最大值。 考慮到 Calendar#getFirstDayOfWeek()、Calendar#getMinimalDaysInFirstWeek()、getGregorianChange 和 Calendar#getTimeZone() 方法的當前值,最低最大值定義為 getActualMaximum(int) 針對任何可能的時間值返回的最小值 .

指定者:

日歷類中的getLeastMaximum

參數(shù):

參數(shù)名稱 參數(shù)描述
field 日歷字段

返回:

給定日歷字段的最低最大值。

getActualMinimum

public int getActualMinimum(int field)

返回此日歷字段可能具有的最小值,同時考慮給定的時間值和 Calendar#getFirstDayOfWeek()、Calendar#getMinimalDaysInFirstWeek()、getGregorianChange 和 Calendar#getTimeZone() 方法的當前值。

例如,如果公歷更改日期為 1970 年 1 月 10 日,并且此 GregorianCalendar 的日期為 1970 年 1 月 20 日,則 DAY_OF_MONTH 字段的實際最小值為 10,因為 1970 年 1 月 10 日的上一個日期是 1996 年 12 月 27 日( 在儒略歷中)。 因此,1969 年 12 月 28 日至 1970 年 1 月 9 日不存在。

覆蓋:

日歷類中的 getActualMinimum

參數(shù):

參數(shù)名稱 參數(shù)描述
field 日歷字段

返回:

此 GregorianCalendar 的時間值的給定字段的最小值

getActualMaximum

public int getActualMaximum(int field)

返回此日歷字段可能具有的最大值,同時考慮給定的時間值和 Calendar#getFirstDayOfWeek()、Calendar#getMinimalDaysInFirstWeek()、getGregorianChange 和 Calendar#getTimeZone() 方法的當前值。 例如,如果此實例的日期是 2004 年 2 月 1 日,則 DAY_OF_MONTH 字段的實際最大值為 29,因為 2004 年是閏年,如果此實例的日期是 2005 年 2 月 1 日,則為 28。

此方法根據(jù) Calendar#YEAR(日歷年)值而不是周年計算 Calendar#WEEK_OF_YEAR 的最大值。 調用 getWeeksInWeekYear() 以獲取此 GregorianCalendar 的周年中 WEEK_OF_YEAR 的最大值。

覆蓋:

日歷類中的 getActualMaximum

參數(shù):

參數(shù)名稱 參數(shù)描述
field 日歷字段

返回:

此 GregorianCalendar 的時間值的給定字段的最大值

clone

public Object clone()

從班級復制的描述:日歷

創(chuàng)建并返回此對象的副本。

覆蓋:

在日歷類中克隆

返回:

此對象的副本。

getTimeZone

public TimeZone getTimeZone()

從班級復制的描述:日歷

獲取時區(qū)。

覆蓋:

類 Calendar 中的 getTimeZone

返回:

與此日歷關聯(lián)的時區(qū)對象。

setTimeZone

public void setTimeZone(TimeZone zone)

從班級復制的描述:日歷

使用給定的時區(qū)值設置時區(qū)。

覆蓋:

日歷類中的 setTimeZone

參數(shù):

參數(shù)名稱 參數(shù)描述
zone 給定的時區(qū)。

isWeekDateSupported

public final boolean isWeekDateSupported()

返回 true 表示此 GregorianCalendar 支持星期日期。

覆蓋:

類 Calendar 中的 isWeekDateSupported

返回:

true(總是)

getWeekYear

public int getWeekYear()

返回此 GregorianCalendar 表示的周年。 在 1 和周年的最大周數(shù)之間的周中的日期具有相同的周年值,可能在 Calendar#YEAR(日歷年)值之前或之后一年。

此方法在計算周年之前調用 Calendar#complete()。

覆蓋:

課堂日歷中的getWeekYear

返回:

此 GregorianCalendar 表示的周年。 如果 Calendar#ERA 值為 BC,則年份由 0 或負數(shù)表示:BC 1 為 0,BC 2 為 -1,BC 3 為 -2,依此類推。

Throws:

Throw名稱 Throw描述
IllegalArgumentException 如果任何日歷字段在非寬松模式下無效。

setWeekDate

public void setWeekDate(int weekYear, int weekOfYear, int dayOfWeek)

將此 GregorianCalendar 設置為日期說明符給出的日期 - weekYear、weekOfYear 和 dayOfWeek。 weekOfYear 遵循 WEEK_OF_YEAR 編號。 dayOfWeek 值必須是 Calendar#DAY_OF_WEEK 值之一:Calendar#SUNDAY 到 Calendar#SATURDAY。

請注意,數(shù)字星期幾表示不同于 ISO 8601 標準,并且當 getFirstDayOfWeek() 為 MONDAY 且 getMinimalDaysInFirstWeek() 為 4 時,weekOfYear 編號與標準兼容。

與 set 方法不同,所有日歷字段和時間值都是在返回時計算的。

如果 weekOfYear 超出了 weekYear 中的有效周范圍,則在寬松模式下調整 weekYear 和 weekOfYear 值,或者在非寬松模式下拋出 IllegalArgumentException。

覆蓋:

日歷類中的 setWeekDate

參數(shù):

參數(shù)名稱 參數(shù)描述
weekYear 一周年
weekOfYear 基于 weekYear 的周數(shù)
dayOfWeek 星期幾值:DAY_OF_WEEK 字段的常量之一:Calendar#SUNDAY, ..., Calendar#SATURDAY。

Throws:

Throw名稱 Throw描述
IllegalArgumentException 如果任何給定的日期說明符無效,或者任何日歷字段與非寬松模式下的給定日期說明符不一致

getWeeksInWeekYear

public int getWeeksInWeekYear()

返回此 GregorianCalendar 表示的一周年中的周數(shù)。

例如,如果此 GregorianCalendar 的日期為 2008 年 12 月 31 日,且設置為 ISO 8601 兼容,則此方法將在以下期間返回 53:2008 年 12 月 29 日至 2010 年 1 月 3 日,而 getActualMaximum(WEEK_OF_YEAR) 將在以下期間返回 52:12 月 2007 年 31 月 31 日至 2008 年 12 月 28 日。

覆蓋:

類日歷中的getWeeksInWeekYear

返回:

一周中的周數(shù)。

computeFields

protected void computeFields()

將時間值(從 Epoch 的毫秒偏移量)轉換為日歷字段值。 時間不先重新計算; 重新計算時間,然后是字段,調用完整方法。

指定者:

日歷類中的 computeFields

computeTime

protected void computeTime()

將日歷字段值轉換為時間值(從 Epoch 開始的毫秒偏移量)。

指定者:

日歷類中的 computeTime

Throws:

Throw名稱 Throw描述
IllegalArgumentException 如果任何日歷字段無效。

toZonedDateTime

public ZonedDateTime toZonedDateTime()

將此對象轉換為 ZonedDateTime,它表示時間線上與此 GregorianCalendar 相同的點。

由于此對象支持 Julian-Gregorian 轉換日期而 ZonedDateTime 不支持,因此生成的年、月和日可能具有不同的值。 結果將代表 ISO 日歷系統(tǒng)中的正確日期,這對于修改儒略日也將是相同的值。

返回:

表示時間線上與此公歷相同的點的分區(qū)日期時間

from

public static GregorianCalendar from(ZonedDateTime zdt)

從 ZonedDateTime 對象獲取具有默認語言環(huán)境的 GregorianCalendar 實例。

由于 ZonedDateTime 不支持 Julian-Gregorian 轉換日期并使用 ISO 日歷系統(tǒng),因此返回 GregorianCalendar 是純公歷并使用 ISO 8601 標準定義周,其中 MONDAY 作為 Calendar#getFirstDayOfWeek() 和 4 作為值 日歷#getMinimalDaysInFirstWeek()。

ZoneDateTime 可以比 GregorianCalendar 在未來和過去更遠地存儲時間線上的點。 在這種情況下,此方法將引發(fā) IllegalArgumentException 異常。

參數(shù):

參數(shù)名稱 參數(shù)描述
zdt 要轉換的分區(qū)日期時間對象

返回:

公歷,表示時間線上與提供的分區(qū)日期時間相同的點

Throws:

Throw名稱 Throw描述
NullPointerException 如果 zdt 為空
IllegalArgumentException 如果分區(qū)日期時間太大而無法表示為 GregorianCalendar
以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號