- 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 方法 描述 Calendar
build()
返回一个由setter方法设置的参数构建的Calendar
。Calendar.Builder
set(int field, int value)
将field
参数设置为给定的value
。Calendar.Builder
setCalendarType(String type)
将日历类型参数设置为给定的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
值是一毫秒的偏移 the Epoch 。Calendar.Builder
setInstant(Date instant)
设置即时参数设置为instant
由给定值Date
。Calendar.Builder
setLenient(boolean lenient)
将宽松模式参数设置为lenient
给出的值。Calendar.Builder
setLocale(Locale locale)
将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)
将时区参数设置为给定的zone
。Calendar.Builder
setWeekDate(int weekYear, int weekOfYear, int dayOfWeek)
将基于周的日期参数设置为给定日期说明符 - 周年,年周和星期几的值。Calendar.Builder
setWeekDefinition(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)
将日期字段参数设置year
month
和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)
将时间字段参数设置hourOfDay
minute
和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()
-
-