- 封闭类:
Calendar
Calendar.Builder 用于根据各种日期时间参数创建 Calendar。
有两种方法可以将 Calendar 设置为日期时间值。一种是将即时参数设置为与 时代 的毫秒偏移量。另一种是将各个字段参数(例如 YEAR )设置为所需的值。这两种方式不能混用。尝试同时设置即时字段和单独字段将导致抛出 IllegalStateException 。但是,允许覆盖即时或字段参数的先前值。
如果没有足够的字段参数来确定日期和/或时间,则在构建 Calendar 时使用日历特定的默认值。例如,如果没有为公历指定 YEAR 值,则将使用 1970。如果字段参数之间存在任何冲突,则应用决议规则。因此,字段设置的顺序很重要。
除了日期时间参数外,还可以设置 locale、时区、星期定义 和 宽大模式 参数。
示例
以下是示例用法。示例代码假定 Calendar 常量是静态导入的。
以下代码生成日期为 2012-12-31(公历)的 Calendar,因为星期一是 ISO 8601 兼容周参数 一周的第一天。
Calendar cal = new Calendar.Builder().setCalendarType("iso8601")
.setWeekDate(2013, 1, MONDAY).build();
以下代码生成日期为 1989-01-08(公历)的日文 Calendar,假设默认的 ERA 是从那天开始的 Heisei。
Calendar cal = new Calendar.Builder().setCalendarType("japanese")
.setFields(YEAR, 1, DAY_OF_YEAR, 1).build();
- 自从:
- 1.8
- 参见:
-
构造方法总结
构造方法 -
方法总结
修饰符和类型方法描述build()返回根据 setter 方法设置的参数构建的Calendar。set(int field, int value) 将field参数设置为给定的value。setCalendarType(String type) 将日历类型参数设置为给定的type。setDate(int year, int month, int dayOfMonth) 将日期字段参数设置为year、month和dayOfMonth给出的值。setFields(int... fieldValuePairs) 将字段参数设置为其由fieldValuePairs给出的值,这些值是字段及其值的对。setInstant(long instant) 将即时参数设置为给定的instant值,该值是 纪元 的毫秒偏移量。setInstant(Date instant) 将即时参数设置为Date给出的instant值。setLenient(boolean lenient) 将宽松模式参数设置为lenient给出的值。将locale参数设置为给定的locale。setTimeOfDay(int hourOfDay, int minute, int second) 将时间字段参数设置为hourOfDay、minute和second给出的值。setTimeOfDay(int hourOfDay, int minute, int second, int millis) 将时间字段参数设置为hourOfDay、minute、second和millis给出的值。setTimeZone(TimeZone zone) 将时区参数设置为给定的zone。setWeekDate(int weekYear, int weekOfYear, int dayOfWeek) 将基于周的日期参数设置为具有给定日期说明符的值 - 年周、年中周和周中天。setWeekDefinition(int firstDayOfWeek, int minimalDaysInFirstWeek)
-
构造方法详细信息
-
建设者
public Builder()构造一个Calendar.Builder
-
-
方法详情
-
setInstant
将即时参数设置为给定的instant值,该值是 纪元 的毫秒偏移量。- 参数:
instant- 距纪元的毫秒偏移量- 返回:
-
这个
Calendar.Builder - 抛出:
IllegalStateException- 如果已经设置了任何字段参数- 参见:
-
setInstant
- 参数:
instant- 一个Date表示距纪元的毫秒偏移量- 返回:
-
这个
Calendar.Builder - 抛出:
NullPointerException- 如果instant是nullIllegalStateException- 如果已经设置了任何字段参数- 参见:
-
set
将field参数设置为给定的value。field是Calendar.fields的索引,例如DAY_OF_MONTH。此方法不执行字段值验证。在构建Calendar时,任何超出范围的值要么在宽松模式下被归一化,要么在非宽松模式下被检测为无效值。- 参数:
field-Calendar字段的索引value- 字段值- 返回:
-
这个
Calendar.Builder - 抛出:
IllegalArgumentException- 如果field无效IllegalStateException- 如果即时值已经设置,或者字段设置次数过多(大约Integer.MAX_VALUE)。- 参见:
-
setFields
将字段参数设置为其由fieldValuePairs给出的值,这些值是字段及其值的对。例如,setFields(Calendar.YEAR, 2013, Calendar.MONTH, Calendar.DECEMBER, Calendar.DAY_OF_MONTH, 23);等同于以下set调用的序列:set(Calendar.YEAR, 2013) .set(Calendar.MONTH, Calendar.DECEMBER) .set(Calendar.DAY_OF_MONTH, 23);
- 参数:
fieldValuePairs- 字段值对- 返回:
-
这个
Calendar.Builder - 抛出:
NullPointerException- 如果fieldValuePairs是nullIllegalArgumentException- 如果任何字段无效,或者fieldValuePairs.length是奇数。IllegalStateException- 如果已设置即时值,或者字段设置次数过多(大约Integer.MAX_VALUE)。
-
setDate
将日期字段参数设置为year、month和dayOfMonth给出的值。此方法等效于调用:setFields(Calendar.YEAR, year, Calendar.MONTH, month, Calendar.DAY_OF_MONTH, dayOfMonth);- 参数:
year-YEAR值month-MONTH值(月份编号为 0-based )。dayOfMonth-DAY_OF_MONTH值- 返回:
-
这个
Calendar.Builder
-
setTimeOfDay
将时间字段参数设置为hourOfDay、minute和second给出的值。此方法等效于调用:setTimeOfDay(hourOfDay, minute, second, 0);
- 参数:
hourOfDay-HOUR_OF_DAY值(24 小时制)minute-MINUTE值second-SECOND值- 返回:
-
这个
Calendar.Builder
-
setTimeOfDay
将时间字段参数设置为hourOfDay、minute、second和millis给出的值。此方法等效于调用:setFields(Calendar.HOUR_OF_DAY, hourOfDay, Calendar.MINUTE, minute, Calendar.SECOND, second, Calendar.MILLISECOND, millis);- 参数:
hourOfDay-HOUR_OF_DAY值(24 小时制)minute-MINUTE值second-SECOND值millis-MILLISECOND值- 返回:
-
这个
Calendar.Builder
-
setWeekDate
将基于周的日期参数设置为具有给定日期说明符的值 - 年周、年中周和周中天。如果指定的日历不支持星期日期,
build方法将抛出一个IllegalArgumentException。- 参数:
weekYear- 星期年weekOfYear- 基于weekYear的周数dayOfWeek- 星期几值:DAY_OF_WEEK字段的常量之一:SUNDAY,...,SATURDAY。- 返回:
-
这个
Calendar.Builder - 参见:
-
setTimeZone
- 参数:
zone-TimeZone- 返回:
-
这个
Calendar.Builder - 抛出:
NullPointerException- 如果zone是null- 参见:
-
setLenient
- 参数:
lenient-true用于宽松模式;false用于非宽松模式- 返回:
-
这个
Calendar.Builder - 参见:
-
setCalendarType
将日历类型参数设置为给定的type。此方法给出的日历类型优先于 locale 给出的任何显式或隐式日历类型。除了
Calendar.getAvailableCalendarTypes方法返回的可用日历类型外,"gregorian"和"iso8601"作为"gregory"的别名也可用于此方法。- 参数:
type- 日历类型- 返回:
-
这个
Calendar.Builder - 抛出:
NullPointerException- 如果type是nullIllegalArgumentException- 如果type未知IllegalStateException- 如果已经设置了另一种日历类型- 参见:
-
setLocale
将locale参数设置为给定的locale。如果没有为这个Calendar.Builder提供locale,则将使用 defaultLocaleforLocale.Category.FORMAT。如果调用
setCalendarType方法没有明确给出日历类型,则Locale值用于确定要构建的Calendar的类型。如果调用
setWeekDefinition方法时未明确给出周定义参数,则使用Locale的默认值。- 参数:
locale-Locale- 返回:
-
这个
Calendar.Builder - 抛出:
NullPointerException- 如果locale是null- 参见:
-
setWeekDefinition
- 参数:
firstDayOfWeek- 一周的第一天;Calendar.SUNDAY到Calendar.SATURDAY之一minimalDaysInFirstWeek- 第一周的最少天数 (1..7)- 返回:
-
这个
Calendar.Builder - 抛出:
IllegalArgumentException- 如果firstDayOfWeek或minimalDaysInFirstWeek无效- 参见:
-
build
返回根据 setter 方法设置的参数构建的Calendar。setCalendarType方法或locale 给出的日历类型用于确定要创建的Calendar。如果没有给出明确的日历类型,则创建区域设置的默认日历。如果日历类型为
"iso8601",则GregorianCalendar的 公历更改日期 设置为Date(Long.MIN_VALUE)为 proleptic 公历。其周定义参数也设置为 符合ISO 8601标准 。请注意,使用"iso8601"创建的GregorianCalendar的getCalendarType方法返回"gregory"。如果没有明确给出这些参数,则默认值用于区域设置和时区。
如果区域设置包含带“tz” Unicode 扩展 的时区,并且未明确指定时区,则使用区域设置中的时区。
任何超出范围的字段值要么在宽松模式下被规范化,要么在非宽松模式下被检测为无效值。
- 返回:
-
一个
Calendar使用这个Calendar.Builder的参数构建 - 抛出:
IllegalArgumentException- 如果日历类型未知,或者在非宽松模式下给出了任何无效的字段值,或者如果为不支持周日期的日历类型给出了周日期。- 参见:
-