鴻蒙OS Calendar.Builder

2022-07-14 17:41 更新

Calendar.Builder

java.lang.Object

|---java.util.Calendar.Builder

public static class Calendar.Builder
extends Object

Calendar.Builder 用于從各種日期時(shí)間參數(shù)創(chuàng)建日歷。

有兩種方法可以將日歷設(shè)置為日期時(shí)間值。一種是將 Instant 參數(shù)設(shè)置為距 Epoch 的毫秒偏移量。另一種是將單個(gè)字段參數(shù)(例如 Calendar#YEAR)設(shè)置為所需的值。這兩種方式不能混用。嘗試同時(shí)設(shè)置即時(shí)字段和單個(gè)字段將導(dǎo)致拋出 IllegalStateException。但是,允許覆蓋即時(shí)或字段參數(shù)的先前值。

如果沒有為確定日期和/或時(shí)間提供足夠的字段參數(shù),則在構(gòu)建日歷時(shí)使用日歷特定的默認(rèn)值。例如,如果沒有為公歷指定 Calendar#YEAR 值,則將使用 1970。如果字段參數(shù)之間存在任何沖突,則應(yīng)用解析規(guī)則。因此,字段設(shè)置的順序很重要。

除了日期時(shí)間參數(shù)外,還可以設(shè)置語言環(huán)境、時(shí)區(qū)、星期定義和寬大模式參數(shù)。

例子

以下是示例用法。示例代碼假定日歷常量是靜態(tài)導(dǎo)入的。

以下代碼生成日期為 2012-12-31(公歷)的日歷,因?yàn)樾瞧谝皇蔷哂?ISO 8601 兼容周參數(shù)的一周的第一天。

   Calendar cal = new Calendar.Builder().setCalendarType("iso8601")
                        .setWeekDate(2013, 1, MONDAY).build();

以下代碼生成日期為 1989-01-08(公歷)的日本日歷,假設(shè)默認(rèn) Calendar#ERA 是當(dāng)天開始的平成。

   Calendar cal = new Calendar.Builder().setCalendarType("japanese")
                        .setFields(YEAR, 1, DAY_OF_YEAR, 1).build();

構(gòu)造函數(shù)摘要

構(gòu)造函數(shù) 描述
Builder() 構(gòu)造一個(gè) Calendar.Builder。

方法總結(jié)

修飾符和類型 方法 描述
Calendar build() 返回由 setter 方法設(shè)置的參數(shù)構(gòu)建的 Calendar。
Calendar.Builder set(int field, int value) 將字段參數(shù)設(shè)置為給定值。
Calendar.Builder setCalendarType(String type) 將日歷類型參數(shù)設(shè)置為給定類型。
Calendar.Builder setDate(int year, int month, int dayOfMonth) 將日期字段參數(shù)設(shè)置為由 year、month 和 dayOfMonth 給出的值。
Calendar.Builder setFields(int... fieldValuePairs) 將字段參數(shù)設(shè)置為由 fieldValuePairs 給定的值,它們是字段及其值的對(duì)。
Calendar.Builder setInstant(long instant) 將 Instant 參數(shù)設(shè)置為給定的瞬時(shí)值,該值是從 Epoch 的毫秒偏移量。
Calendar.Builder setInstant(Date instant) 將 Instant 參數(shù)設(shè)置為由 Date 給出的瞬時(shí)值。
Calendar.Builder setLenient(boolean lenient) 將 lenient 模式參數(shù)設(shè)置為 lenient 給出的值。
Calendar.Builder setLocale(Locale locale) 將語言環(huán)境參數(shù)設(shè)置為給定的語言環(huán)境。
Calendar.Builder setTimeOfDay(int hourOfDay, int minute, int second) 將時(shí)間字段參數(shù)設(shè)置為由 hourOfDay、minute 和 second 給出的值。
Calendar.Builder setTimeOfDay(int hourOfDay, int minute, int second, int millis) 將時(shí)間字段參數(shù)設(shè)置為由 hourOfDay、minute、second 和 millis 給出的值。
Calendar.Builder setTimeZone(TimeZone zone) 將時(shí)區(qū)參數(shù)設(shè)置為給定的區(qū)域。
Calendar.Builder setWeekDate(int weekYear, int weekOfYear, int dayOfWeek) 將基于周的日期參數(shù)設(shè)置為具有給定日期說明符的值 - 周年、年周和周日。
Calendar.Builder setWeekDefinition(int firstDayOfWeek, int minimalDaysInFirstWeek) 將周定義參數(shù)設(shè)置為 firstDayOfWeek 和 minimumDaysInFirstWeek 給出的值,用于確定一年中的第一周。
從類 java.lang.Object 繼承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

構(gòu)造函數(shù)詳細(xì)信息

Builder

public Builder()

構(gòu)造一個(gè) Calendar.Builder。

方法詳情

setInstant

public Calendar.Builder setInstant(long instant)

將 Instant 參數(shù)設(shè)置為給定的瞬時(shí)值,該值是從 Epoch 的毫秒偏移量。

參數(shù):

參數(shù)名稱 參數(shù)描述
instant 從 Epoch 的毫秒偏移量

返回:

這個(gè) Calendar.Builder

Throws:

Throw名稱 Throw描述
IllegalStateException 如果已經(jīng)設(shè)置了任何字段參數(shù)

setInstant

public Calendar.Builder setInstant(Date instant)

將 Instant 參數(shù)設(shè)置為由 Date 給出的瞬時(shí)值。 此方法等效于調(diào)用 setInstant(instant.getTime())。

參數(shù):

參數(shù)名稱 參數(shù)描述
instant 表示從 Epoch 開始的毫秒偏移量的 Date

返回:

這個(gè) Calendar.Builder

Throws:

Throw名稱 Throw描述
NullPointerException 如果 instant 為空
IllegalStateException 如果已經(jīng)設(shè)置了任何字段參數(shù)

set

public Calendar.Builder set(int field, int value)

將字段參數(shù)設(shè)置為給定值。 field 是 Calendar#fields 的索引,例如 Calendar#DAY_OF_MONTH。 此方法不執(zhí)行字段值驗(yàn)證。 在構(gòu)建日歷時(shí),任何超出范圍的值要么在寬松模式下被標(biāo)準(zhǔn)化,要么在非寬松模式下被檢測(cè)為無效值。

參數(shù):

參數(shù)名稱 參數(shù)描述
field 日歷字段的索引
value 字段值

返回:

這個(gè) Calendar.Builder

Throws:

Throw名稱 Throw描述
IllegalArgumentException 如果字段無效
IllegalStateException 如果已經(jīng)設(shè)置了即時(shí)值,或者如果字段設(shè)置太多(大約 Integer#MAX_VALUE)次。

setFields

public Calendar.Builder setFields(int... fieldValuePairs)

將字段參數(shù)設(shè)置為由 fieldValuePairs 給定的值,它們是字段及其值的對(duì)。 例如,

   setFeilds(Calendar.YEAR, 2013,
             Calendar.MONTH, Calendar.DECEMBER,
             Calendar.DAY_OF_MONTH, 23);

等價(jià)于以下集合調(diào)用的序列:

   set(Calendar.YEAR, 2013)
   .set(Calendar.MONTH, Calendar.DECEMBER)
   .set(Calendar.DAY_OF_MONTH, 23);

參數(shù):

參數(shù)名稱 參數(shù)描述
fieldValuePairs 字段值對(duì)

返回:

這個(gè) Calendar.Builder

Throws:

Throw名稱 Throw描述
NullPointerException 如果 fieldValuePairs 為空
IllegalArgumentException 如果任何字段無效,或者 fieldValuePairs.length 是奇數(shù)。
IllegalStateException 如果設(shè)置了即時(shí)值,或者字段設(shè)置的次數(shù)過多(大約為 Integer#MAX_VALUE)次。

setDate

public Calendar.Builder setDate(int year, int month, int dayOfMonth)

將日期字段參數(shù)設(shè)置為由 year、month 和 dayOfMonth 給出的值。 此方法等效于調(diào)用:

   setFields(Calendar.YEAR, year,
             Calendar.MONTH, month,
             Calendar.DAY_OF_MONTH, dayOfMonth);

參數(shù):

參數(shù)名稱 參數(shù)描述
year 日歷#YEAR 值
month Calendar#MONTH 值(月份編號(hào)從 0 開始)。
dayOfMonth Calendar#DAY_OF_MONTH 值

返回:

這個(gè) Calendar.Builder

setTimeOfDay

public Calendar.Builder setTimeOfDay(int hourOfDay, int minute, int second)

將時(shí)間字段參數(shù)設(shè)置為由 hourOfDay、minute 和 second 給出的值。 此方法等效于調(diào)用:

   setTimeOfDay(hourOfDay, minute, second, 0);

參數(shù):

參數(shù)名稱 參數(shù)描述
hourOfDay Calendar#HOUR_OF_DAY 值(24 小時(shí)制)
minute 日歷#MINUTE 值
second 日歷#SECOND 值

返回:

這個(gè) Calendar.Builder

setTimeOfDay

public Calendar.Builder setTimeOfDay(int hourOfDay, int minute, int second, int millis)

將時(shí)間字段參數(shù)設(shè)置為由 hourOfDay、minute、second 和 millis 給出的值。 此方法等效于調(diào)用:

   setFields(Calendar.HOUR_OF_DAY, hourOfDay,
             Calendar.MINUTE, minute,
             Calendar.SECOND, second,
             Calendar.MILLISECOND, millis);

參數(shù):

參數(shù)名稱 參數(shù)描述
hourOfDay Calendar#HOUR_OF_DAY 值(24 小時(shí)制)
minute 日歷#MINUTE 值
second 日歷#SECOND 值
millis 日歷#MILLISECOND 值

返回:

這個(gè) Calendar.Builder

setWeekDate

public Calendar.Builder setWeekDate(int weekYear, int weekOfYear, int dayOfWeek)

將基于周的日期參數(shù)設(shè)置為具有給定日期說明符的值 - 周年、年周和周日。

如果指定的日歷不支持星期日期,則 build 方法將拋出 IllegalArgumentException。

參數(shù):

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

返回:

這個(gè) Calendar.Builder

setTimeZone

public Calendar.Builder setTimeZone(TimeZone zone)

將時(shí)區(qū)參數(shù)設(shè)置為給定的區(qū)域。 如果沒有為此 Caledar.Builder 提供時(shí)區(qū)參數(shù),則 TimeZone#getDefault() 將在構(gòu)建方法中使用。

參數(shù):

參數(shù)名稱 參數(shù)描述
zone 時(shí)區(qū)

返回:

這個(gè) Calendar.Builder

Throws:

Throw名稱 Throw描述
NullPointerException 如果區(qū)域?yàn)榭?/td>

setLenient

public Calendar.Builder setLenient(boolean lenient)

將 lenient 模式參數(shù)設(shè)置為 lenient 給出的值。 如果此 Calendar.Builder 沒有給出 lenient 參數(shù),則在 build 方法中將使用 lenient 模式。

參數(shù):

參數(shù)名稱 參數(shù)描述
lenient 寬松模式下為true; 非寬松模式為 false

返回:

這個(gè) Calendar.Builder

setCalendarType

public Calendar.Builder setCalendarType(String type)

將日歷類型參數(shù)設(shè)置為給定類型。 此方法給出的日歷類型優(yōu)先于語言環(huán)境給出的任何顯式或隱式日歷類型。

除了 Calendar#getAvailableCalendarTypes() 方法返回的可用日歷類型之外,作為“gregory”的別名的“gregorian”和“iso8601”可以與此方法一起使用。

參數(shù):

參數(shù)名稱 參數(shù)描述
type 日歷類型

返回:

這個(gè) Calendar.Builder

Throws:

Throw名稱 Throw描述
NullPointerException 如果類型為空
IllegalArgumentException 如果類型未知
IllegalStateException 如果已經(jīng)設(shè)置了另一種日歷類型

setLocale

public Calendar.Builder setLocale(Locale locale)

將語言環(huán)境參數(shù)設(shè)置為給定的語言環(huán)境。 如果沒有為此 Calendar.Builder 指定區(qū)域設(shè)置,則將使用 Locale.Category#FORMAT 的 Locale#getDefault(Locale.Category)。

如果調(diào)用 setCalendarType 方法沒有明確給出日歷類型,則使用 Locale 值來確定要構(gòu)建的日歷類型。

如果調(diào)用 setWeekDefinition 方法沒有明確給出周定義參數(shù),則使用區(qū)域設(shè)置的默認(rèn)值。

參數(shù):

參數(shù)名稱 參數(shù)描述
locale 語言環(huán)境

返回:

這個(gè) Calendar.Builder

Throws:

Throw名稱 Throw描述
NullPointerException 如果語言環(huán)境為空

setWeekDefinition

public Calendar.Builder setWeekDefinition(int firstDayOfWeek, int minimalDaysInFirstWeek)

將周定義參數(shù)設(shè)置為 firstDayOfWeek 和 minimumDaysInFirstWeek 給出的值,用于確定一年中的第一周。 此方法給出的參數(shù)優(yōu)先于語言環(huán)境給出的默認(rèn)值。

參數(shù):

參數(shù)名稱 參數(shù)描述
firstDayOfWeek 一周的第一天; Calendar#SUNDAY 到 Calendar#SATURDAY 之一
minimalDaysInFirstWeek 第一周的最少天數(shù) (1..7)

返回:

這個(gè) Calendar.Builder

Throws:

Throw名稱 Throw描述
IllegalArgumentException 如果 firstDayOfWeek 或 minimumDaysInFirstWeek 無效

build

public Calendar build()

返回由 setter 方法設(shè)置的參數(shù)構(gòu)建的 Calendar。 setCalendarType 方法或語言環(huán)境給出的日歷類型用于確定要?jiǎng)?chuàng)建的日歷。 如果沒有給出明確的日歷類型,則創(chuàng)建區(qū)域設(shè)置的默認(rèn)日歷。

如果日歷類型為“iso8601”,則將 GregorianCalendar 的 GregorianCalendar#setGregorianChange(Date) 設(shè)置為 Date(Long.MIN_VALUE) 以作為預(yù)想的公歷。 其周定義參數(shù)也設(shè)置為與 ISO 8601 標(biāo)準(zhǔn)兼容。 請(qǐng)注意,使用“iso8601”創(chuàng)建的 GregorianCalendar#getCalendarType() 方法返回“gregory”。

如果沒有明確給出這些參數(shù),則默認(rèn)值用于區(qū)域設(shè)置和時(shí)區(qū)。

任何超出范圍的字段值要么在寬松模式下被規(guī)范化,要么在非寬松模式下被檢測(cè)為無效值。

返回:

使用此 Calendar.Builder 的參數(shù)構(gòu)建的日歷

Throws:

Throw名稱 Throw描述
IllegalArgumentException 如果日歷類型未知,或者在非寬松模式下提供了任何無效字段值,或者為不支持星期日期的日歷類型提供了星期日期。
以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)