阅读(3825) (0)

鸿蒙OS Calendar.Builder

2022-06-16 16:21:41 更新

Calendar.Builder

java.lang.Object

|---java.util.Calendar.Builder

public static class Calendar.Builder
extends Object

Calendar.Builder 用于从各种日期时间参数创建日历。

有两种方法可以将日历设置为日期时间值。一种是将 Instant 参数设置为距 Epoch 的毫秒偏移量。另一种是将单个字段参数(例如 Calendar#YEAR)设置为所需的值。这两种方式不能混用。尝试同时设置即时字段和单个字段将导致抛出 IllegalStateException。但是,允许覆盖即时或字段参数的先前值。

如果没有为确定日期和/或时间提供足够的字段参数,则在构建日历时使用日历特定的默认值。例如,如果没有为公历指定 Calendar#YEAR 值,则将使用 1970。如果字段参数之间存在任何冲突,则应用解析规则。因此,字段设置的顺序很重要。

除了日期时间参数外,还可以设置语言环境、时区、星期定义和宽大模式参数。

例子

以下是示例用法。示例代码假定日历常量是静态导入的。

以下代码生成日期为 2012-12-31(公历)的日历,因为星期一是具有 ISO 8601 兼容周参数的一周的第一天。

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

以下代码生成日期为 1989-01-08(公历)的日本日历,假设默认 Calendar#ERA 是当天开始的平成。

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

构造函数摘要

构造函数 描述
Builder() 构造一个 Calendar.Builder。

方法总结

修饰符和类型 方法 描述
Calendar build() 返回由 setter 方法设置的参数构建的 Calendar。
Calendar.Builder set(int field, int value) 将字段参数设置为给定值。
Calendar.Builder setCalendarType(String type) 将日历类型参数设置为给定类型。
Calendar.Builder setDate(int year, int month, int dayOfMonth) 将日期字段参数设置为由 year、month 和 dayOfMonth 给出的值。
Calendar.Builder setFields(int... fieldValuePairs) 将字段参数设置为由 fieldValuePairs 给定的值,它们是字段及其值的对。
Calendar.Builder setInstant(long instant) 将 Instant 参数设置为给定的瞬时值,该值是从 Epoch 的毫秒偏移量。
Calendar.Builder setInstant(Date instant) 将 Instant 参数设置为由 Date 给出的瞬时值。
Calendar.Builder setLenient(boolean lenient) 将 lenient 模式参数设置为 lenient 给出的值。
Calendar.Builder setLocale(Locale locale) 将语言环境参数设置为给定的语言环境。
Calendar.Builder setTimeOfDay(int hourOfDay, int minute, int second) 将时间字段参数设置为由 hourOfDay、minute 和 second 给出的值。
Calendar.Builder setTimeOfDay(int hourOfDay, int minute, int second, int millis) 将时间字段参数设置为由 hourOfDay、minute、second 和 millis 给出的值。
Calendar.Builder setTimeZone(TimeZone zone) 将时区参数设置为给定的区域。
Calendar.Builder setWeekDate(int weekYear, int weekOfYear, int dayOfWeek) 将基于周的日期参数设置为具有给定日期说明符的值 - 周年、年周和周日。
Calendar.Builder setWeekDefinition(int firstDayOfWeek, int minimalDaysInFirstWeek) 将周定义参数设置为 firstDayOfWeek 和 minimumDaysInFirstWeek 给出的值,用于确定一年中的第一周。
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

构造函数详细信息

Builder

public Builder()

构造一个 Calendar.Builder。

方法详情

setInstant

public Calendar.Builder setInstant(long instant)

将 Instant 参数设置为给定的瞬时值,该值是从 Epoch 的毫秒偏移量。

参数:

参数名称 参数描述
instant 从 Epoch 的毫秒偏移量

返回:

这个 Calendar.Builder

Throws:

Throw名称 Throw描述
IllegalStateException 如果已经设置了任何字段参数

setInstant

public Calendar.Builder setInstant(Date instant)

将 Instant 参数设置为由 Date 给出的瞬时值。 此方法等效于调用 setInstant(instant.getTime())。

参数:

参数名称 参数描述
instant 表示从 Epoch 开始的毫秒偏移量的 Date

返回:

这个 Calendar.Builder

Throws:

Throw名称 Throw描述
NullPointerException 如果 instant 为空
IllegalStateException 如果已经设置了任何字段参数

set

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

将字段参数设置为给定值。 field 是 Calendar#fields 的索引,例如 Calendar#DAY_OF_MONTH。 此方法不执行字段值验证。 在构建日历时,任何超出范围的值要么在宽松模式下被标准化,要么在非宽松模式下被检测为无效值。

参数:

参数名称 参数描述
field 日历字段的索引
value 字段值

返回:

这个 Calendar.Builder

Throws:

Throw名称 Throw描述
IllegalArgumentException 如果字段无效
IllegalStateException 如果已经设置了即时值,或者如果字段设置太多(大约 Integer#MAX_VALUE)次。

setFields

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

将字段参数设置为由 fieldValuePairs 给定的值,它们是字段及其值的对。 例如,

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

等价于以下集合调用的序列:

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

参数:

参数名称 参数描述
fieldValuePairs 字段值对

返回:

这个 Calendar.Builder

Throws:

Throw名称 Throw描述
NullPointerException 如果 fieldValuePairs 为空
IllegalArgumentException 如果任何字段无效,或者 fieldValuePairs.length 是奇数。
IllegalStateException 如果设置了即时值,或者字段设置的次数过多(大约为 Integer#MAX_VALUE)次。

setDate

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

将日期字段参数设置为由 year、month 和 dayOfMonth 给出的值。 此方法等效于调用:

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

参数:

参数名称 参数描述
year 日历#YEAR 值
month Calendar#MONTH 值(月份编号从 0 开始)。
dayOfMonth Calendar#DAY_OF_MONTH 值

返回:

这个 Calendar.Builder

setTimeOfDay

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

将时间字段参数设置为由 hourOfDay、minute 和 second 给出的值。 此方法等效于调用:

   setTimeOfDay(hourOfDay, minute, second, 0);

参数:

参数名称 参数描述
hourOfDay Calendar#HOUR_OF_DAY 值(24 小时制)
minute 日历#MINUTE 值
second 日历#SECOND 值

返回:

这个 Calendar.Builder

setTimeOfDay

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

将时间字段参数设置为由 hourOfDay、minute、second 和 millis 给出的值。 此方法等效于调用:

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

参数:

参数名称 参数描述
hourOfDay Calendar#HOUR_OF_DAY 值(24 小时制)
minute 日历#MINUTE 值
second 日历#SECOND 值
millis 日历#MILLISECOND 值

返回:

这个 Calendar.Builder

setWeekDate

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

将基于周的日期参数设置为具有给定日期说明符的值 - 周年、年周和周日。

如果指定的日历不支持星期日期,则 build 方法将抛出 IllegalArgumentException。

参数:

参数名称 参数描述
weekYear 一周年
weekOfYear 基于 weekYear 的周数
dayOfWeek 星期几值:Calendar#DAY_OF_WEEK 字段的常量之一:Calendar#SUNDAY, ..., Calendar#SATURDAY。

返回:

这个 Calendar.Builder

setTimeZone

public Calendar.Builder setTimeZone(TimeZone zone)

将时区参数设置为给定的区域。 如果没有为此 Caledar.Builder 提供时区参数,则 TimeZone#getDefault() 将在构建方法中使用。

参数:

参数名称 参数描述
zone 时区

返回:

这个 Calendar.Builder

Throws:

Throw名称 Throw描述
NullPointerException 如果区域为空

setLenient

public Calendar.Builder setLenient(boolean lenient)

将 lenient 模式参数设置为 lenient 给出的值。 如果此 Calendar.Builder 没有给出 lenient 参数,则在 build 方法中将使用 lenient 模式。

参数:

参数名称 参数描述
lenient 宽松模式下为true; 非宽松模式为 false

返回:

这个 Calendar.Builder

setCalendarType

public Calendar.Builder setCalendarType(String type)

将日历类型参数设置为给定类型。 此方法给出的日历类型优先于语言环境给出的任何显式或隐式日历类型。

除了 Calendar#getAvailableCalendarTypes() 方法返回的可用日历类型之外,作为“gregory”的别名的“gregorian”和“iso8601”可以与此方法一起使用。

参数:

参数名称 参数描述
type 日历类型

返回:

这个 Calendar.Builder

Throws:

Throw名称 Throw描述
NullPointerException 如果类型为空
IllegalArgumentException 如果类型未知
IllegalStateException 如果已经设置了另一种日历类型

setLocale

public Calendar.Builder setLocale(Locale locale)

将语言环境参数设置为给定的语言环境。 如果没有为此 Calendar.Builder 指定区域设置,则将使用 Locale.Category#FORMAT 的 Locale#getDefault(Locale.Category)。

如果调用 setCalendarType 方法没有明确给出日历类型,则使用 Locale 值来确定要构建的日历类型。

如果调用 setWeekDefinition 方法没有明确给出周定义参数,则使用区域设置的默认值。

参数:

参数名称 参数描述
locale 语言环境

返回:

这个 Calendar.Builder

Throws:

Throw名称 Throw描述
NullPointerException 如果语言环境为空

setWeekDefinition

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

将周定义参数设置为 firstDayOfWeek 和 minimumDaysInFirstWeek 给出的值,用于确定一年中的第一周。 此方法给出的参数优先于语言环境给出的默认值。

参数:

参数名称 参数描述
firstDayOfWeek 一周的第一天; Calendar#SUNDAY 到 Calendar#SATURDAY 之一
minimalDaysInFirstWeek 第一周的最少天数 (1..7)

返回:

这个 Calendar.Builder

Throws:

Throw名称 Throw描述
IllegalArgumentException 如果 firstDayOfWeek 或 minimumDaysInFirstWeek 无效

build

public Calendar build()

返回由 setter 方法设置的参数构建的 Calendar。 setCalendarType 方法或语言环境给出的日历类型用于确定要创建的日历。 如果没有给出明确的日历类型,则创建区域设置的默认日历。

如果日历类型为“iso8601”,则将 GregorianCalendar 的 GregorianCalendar#setGregorianChange(Date) 设置为 Date(Long.MIN_VALUE) 以作为预想的公历。 其周定义参数也设置为与 ISO 8601 标准兼容。 请注意,使用“iso8601”创建的 GregorianCalendar#getCalendarType() 方法返回“gregory”。

如果没有明确给出这些参数,则默认值用于区域设置和时区。

任何超出范围的字段值要么在宽松模式下被规范化,要么在非宽松模式下被检测为无效值。

返回:

使用此 Calendar.Builder 的参数构建的日历

Throws:

Throw名称 Throw描述
IllegalArgumentException 如果日历类型未知,或者在非宽松模式下提供了任何无效字段值,或者为不支持星期日期的日历类型提供了星期日期。