- java.lang.Object
-
- java.util.Calendar.Builder
-
- Enclosing class:
- Calendar
public static class Calendar.Builder extends Object
Calendar.Builder用于从各种日期时间参数创建Calendar。将
Calendar设置为日期时间值有两种方法。 一个是将即时参数设置为与Epoch毫秒的偏移量。 另一个是将各个字段参数(如YEAR)设置为所需的值。 这两种方式不能混合。 尝试同时设置即时和个别字段将导致抛出IllegalStateException。 但是,允许覆盖即时或现场参数的先前值。如果没有足够的字段参数来确定日期和/或时间,则在构建
Calendar时使用日历特定的默认值。 例如,如果公历中没有给出YEAR的价值,那么将使用1970年。 如果现场参数有任何冲突,则应用resolution rules 。 因此,现场设置的顺序很重要。除了日期时间参数,该locale , time zone , week definition ,并leniency mode参数进行设置。
例子
以下是示例用法。 示例代码假定
Calendar常量是静态导入的。以下代码产生一个
Calendar与日期2012-12-31(格里高利),因为星期一是一个星期的第一天与ISO 8601 compatible week parameters 。Calendar cal = new Calendar.Builder().setCalendarType("iso8601") .setWeekDate(2013, 1, MONDAY).build();以下代码生成日期为1989-01-08(Gregorian)的日语
Calendar,假设默认的ERA是当天开始的平成 。Calendar cal = new Calendar.Builder().setCalendarType("japanese") .setFields(YEAR, 1, DAY_OF_YEAR, 1).build();- 从以下版本开始:
- 1.8
- 另请参见:
-
Calendar.getInstance(TimeZone, Locale),Calendar.fields
-
-
构造方法摘要
构造方法 Constructor 描述 Builder()构造一个Calendar.Builder。
-
方法摘要
所有方法 接口方法 具体的方法 Modifier and Type 方法 描述 Calendarbuild()返回一个由setter方法设置的参数构建的Calendar。Calendar.Builderset(int field, int value)将field参数设置为给定的value。Calendar.BuildersetCalendarType(String type)将日历类型参数设置为给定的type。Calendar.BuildersetDate(int year, int month, int dayOfMonth)将日期字段参数设置yearmonth和dayOfMonth给出的值。Calendar.BuildersetFields(int... fieldValuePairs)将字段参数设置为由fieldValuePairs给出的值,它们是字段对及其值。Calendar.BuildersetInstant(long instant)设置即时参数给定instant值是一毫秒的偏移 the Epoch 。Calendar.BuildersetInstant(Date instant)设置即时参数设置为instant由给定值Date。Calendar.BuildersetLenient(boolean lenient)将宽松模式参数设置为lenient给出的值。Calendar.BuildersetLocale(Locale locale)将locale参数设置为给定的locale。Calendar.BuildersetTimeOfDay(int hourOfDay, int minute, int second)将时间字段参数设置hourOfDayminute和second给出的值。Calendar.BuildersetTimeOfDay(int hourOfDay, int minute, int second, int millis)设置由给定的一天领域参数值时hourOfDay,minute,second,并millis。Calendar.BuildersetTimeZone(TimeZone zone)将时区参数设置为给定的zone。Calendar.BuildersetWeekDate(int weekYear, int weekOfYear, int dayOfWeek)将基于周的日期参数设置为给定日期说明符 - 周年,年周和星期几的值。Calendar.BuildersetWeekDefinition(int firstDayOfWeek, int minimalDaysInFirstWeek)
-
-
-
方法详细信息
-
setInstant
public Calendar.Builder setInstant(long instant)
设置即时参数给定instant值是一毫秒的偏移 the Epoch 。- 参数
-
instant- 与时代的毫秒偏移 - 结果
-
这个
Calendar.Builder - 异常
-
IllegalStateException- 如果已经设置了任何一个字段参数 - 另请参见:
-
Calendar.setTime(Date),Calendar.setTimeInMillis(long),Calendar.time
-
setInstant
public Calendar.Builder setInstant(Date instant)
设置即时参数设置为instant由给定值Date。 此方法相当于调用setInstant(instant.getTime())。- 参数
-
instant- 一个Date代表距离时代的毫秒偏移量 - 结果
-
这
Calendar.Builder - 异常
-
NullPointerException- 如果instant是null -
IllegalStateException- 是否已经设置了任何字段参数 - 另请参见:
-
Calendar.setTime(Date),Calendar.setTimeInMillis(long),Calendar.time
-
set
public Calendar.Builder set(int field, int value)
将field参数设置为给定的value。field是一个索引到Calendar.fields,如DAY_OF_MONTH。 此方法不执行字段值验证。 任何超出范围的值在宽松模式下进行归一化,或者在构建Calendar时以非宽松模式检测为无效值。- 参数
-
field- 一个索引到Calendar字段 -
value- 字段值 - 结果
-
这
Calendar.Builder - 异常
-
IllegalArgumentException- 如果field无效 -
IllegalStateException- 如果即时值已经设置,或者字段设置太多(约Integer.MAX_VALUE)次。 - 另请参见:
-
Calendar.set(int, int)
-
setFields
public Calendar.Builder setFields(int... fieldValuePairs)
将字段参数设置为由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是null -
IllegalArgumentException- 如果任何字段无效,或者如果fieldValuePairs.length是奇数。 -
IllegalStateException- 如果即时值已设置,或者字段设置过多(约Integer.MAX_VALUE)次。
-
setDate
public Calendar.Builder setDate(int year, int month, int dayOfMonth)
将日期字段参数设置yearmonth和dayOfMonth给出的值。 此方法相当于调用:setFields(Calendar.YEAR, year, Calendar.MONTH, month, Calendar.DAY_OF_MONTH, dayOfMonth);- 参数
-
year-YEAR的价值 -
month-MONTH值(月份编号为 0 )。 -
dayOfMonth-DAY_OF_MONTH的价值 - 结果
-
这
Calendar.Builder
-
setTimeOfDay
public Calendar.Builder setTimeOfDay(int hourOfDay, int minute, int second)
将时间字段参数设置hourOfDayminute和second给出的值。 此方法相当于调用:setTimeOfDay(hourOfDay, minute, second, 0);- 参数
-
hourOfDay-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-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- 星期几值:DAY_OF_WEEK字段的常量之一:SUNDAY,...,SATURDAY。 - 结果
-
这
Calendar.Builder - 另请参见:
-
Calendar.setWeekDate(int, int, int),Calendar.isWeekDateSupported()
-
setTimeZone
public Calendar.Builder setTimeZone(TimeZone zone)
将时区参数设置为给定的zone。 如果没有时区参数给这个Calendar.Builder,该defaultTimeZone将在使用build方法。- 参数
-
zone-TimeZone - 结果
-
这
Calendar.Builder - 异常
-
NullPointerException- 如果zone是null - 另请参见:
-
Calendar.setTimeZone(TimeZone)
-
setLenient
public Calendar.Builder setLenient(boolean lenient)
将宽松模式参数设置为lenient给出的值。 如果没有给这个Calendar.Builder提供宽松的参数,则在build方法中将使用宽大的模式。- 参数
-
lenient-true宽松模式;false用于非宽松模式 - 结果
-
这
Calendar.Builder - 另请参见:
-
Calendar.setLenient(boolean)
-
setCalendarType
public Calendar.Builder setCalendarType(String type)
将日历类型参数设置为给定的type。 该方法给出的日历类型优先于locale给出的任何显式或隐式日历类型。除了由返回可用的日历类型
Calendar.getAvailableCalendarTypes方法,"gregorian"和"iso8601"作为别名"gregory"可以与此方法一起使用。- 参数
-
type- 日历类型 - 结果
-
这
Calendar.Builder - 异常
-
NullPointerException- 如果type是null -
IllegalArgumentException- 如果type未知 -
IllegalStateException- 如果已经设置了其他日历类型 - 另请参见:
-
Calendar.getCalendarType(),Calendar.getAvailableCalendarTypes()
-
setLocale
public Calendar.Builder setLocale(Locale locale)
将locale参数设置为给定的locale。 如果没有给这个Calendar.Builder区域设置,将使用defaultLocale对于Locale.Category.FORMAT。如果没有通过调用
setCalendarType方法明确给出日历类型,则使用Locale值来确定要构建的Calendar类型。如果没有通过调用
setWeekDefinition方法明确给出周定义参数,则使用Locale的默认值。- 参数
-
locale-Locale - 结果
-
这
Calendar.Builder - 异常
-
NullPointerException- 如果locale是null - 另请参见:
-
Calendar.getInstance(Locale)
-
setWeekDefinition
public Calendar.Builder setWeekDefinition(int firstDayOfWeek, int minimalDaysInFirstWeek)
将firstDayOfWeek参数设置为由firstDayOfWeek和minimalDaysInFirstWeek给出的值,用于确定一年中的first week 。 此方法给出的参数优先于locale给出的默认值。- 参数
-
firstDayOfWeek- 一周的第一天; 一个Calendar.SUNDAY到Calendar.SATURDAY -
minimalDaysInFirstWeek- 第一周的最少天数(1..7) - 结果
-
这
Calendar.Builder - 异常
-
IllegalArgumentException- 如果firstDayOfWeek或minimalDaysInFirstWeek无效 - 另请参见:
-
Calendar.getFirstDayOfWeek(),Calendar.getMinimalDaysInFirstWeek()
-
build
public Calendar build()
返回一个由setter方法设置的参数构建的Calendar。 由setCalendarType方法或locale给出的日历类型用于确定要创建的Calendar。 如果没有显示明确的日历类型,则会创建语言环境的默认日历。如果日历类型为
"iso8601",该Gregorian change date一个的GregorianCalendar设置为Date(Long.MIN_VALUE)是proleptic公历。 其周定义参数也设置为compatible with the ISO 8601 standard 。 请注意,使用GregorianCalendar创建的"iso8601"的getCalendarType方法返回"gregory"。如果尚未明确给出这些参数,则默认值用于区域设置和时区。
任何超出范围的字段值都是在宽松模式下进行归一化或在非宽松模式下被检测为无效值。
- 结果
-
一个
Calendar内置的这个Calendar.Builder参数 - 异常
-
IllegalArgumentException- 如果日历类型未知,或者如果在非宽松模式下给出了无效的字段值,或者如果为不支持周日期的日历类型提供了周日期。 - 另请参见:
-
Calendar.getInstance(TimeZone, Locale),Locale.getDefault(Locale.Category),TimeZone.getDefault()
-
-