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();
Calendar.getInstance(TimeZone, Locale)
,
Calendar.fields
Constructor and Description |
---|
Builder()
构造一个
Calendar.Builder 。
|
Modifier and Type | Method and Description |
---|---|
Calendar |
build()
返回一个由setter方法设置的
Calendar 构建的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(Date instant)
设置即时参数设置为 instant 由给定值Date 。
|
Calendar.Builder |
setInstant(long instant)
设置即时参数给定
instant 值是一毫秒的偏移
the Epoch 。
|
Calendar.Builder |
setLenient(boolean lenient)
设置宽松模式参数由给定的值
lenient 。
|
Calendar.Builder |
setLocale(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)
|
public Calendar.Builder setInstant(long instant)
instant
值是一毫秒的偏移
the Epoch 。
instant
- 距离时代的毫秒偏移量
Calendar.Builder
IllegalStateException
- 是否已经设置了任何字段参数
Calendar.setTime(Date)
,
Calendar.setTimeInMillis(long)
,
Calendar.time
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
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)
public Calendar.Builder setFields(int... fieldValuePairs)
fieldValuePairs
是对的领域和它的价值。
例如,
setFeilds(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
)次。
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
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
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
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()
public Calendar.Builder setTimeZone(TimeZone zone)
zone
- TimeZone
Calendar.Builder
NullPointerException
- 如果
zone
是
null
Calendar.setTimeZone(TimeZone)
public Calendar.Builder setLenient(boolean lenient)
lenient
。
如果没有给出这个Calendar.Builder
宽松参数,那么在build
方法中将使用宽大的模式。
lenient
- true
宽松模式;
false
用于非宽松模式
Calendar.Builder
Calendar.setLenient(boolean)
public Calendar.Builder setCalendarType(String type)
type
。
通过这种方法给出的日历型拥有由给定任何明示或暗示的日历类型优先locale 。
除了Calendar.getAvailableCalendarTypes
方法返回的可用日历类型外 , "gregorian"
和"gregory"
可以使用"iso8601"
作为别名。
type
- 日历类型
Calendar.Builder
NullPointerException
- 如果
type
是
null
IllegalArgumentException
- 如果
type
未知
IllegalStateException
- 如果已经设置了其他日历类型
Calendar.getCalendarType()
,
Calendar.getAvailableCalendarTypes()
public Calendar.Builder setLocale(Locale locale)
locale
。
如果没有提供这个Calendar.Builder
区域设置, Locale.Category.FORMAT
的default Locale
将被使用。
如果没有通过调用setCalendarType
方法明确给出日历类型,则使用Locale
值来确定要构建的Calendar
类型。
如果没有通过调用setWeekDefinition
方法明确给出周定义参数,则使用Locale
的默认值。
locale
- Locale
Calendar.Builder
NullPointerException
- 如果
locale
是
null
Calendar.getInstance(Locale)
public Calendar.Builder setWeekDefinition(int firstDayOfWeek, int minimalDaysInFirstWeek)
firstDayOfWeek
和minimalDaysInFirstWeek
给出的值,用于确定一年中的first week 。
通过这种方法给出的参数优先于由给定的默认值locale 。
firstDayOfWeek
- 一周的第一天;
Calendar.SUNDAY
到Calendar.SATURDAY
之一
minimalDaysInFirstWeek
- 第一周最少天数(1..7)
Calendar.Builder
IllegalArgumentException
- 如果
firstDayOfWeek
或
minimalDaysInFirstWeek
无效
Calendar.getFirstDayOfWeek()
,
Calendar.getMinimalDaysInFirstWeek()
public Calendar build()
Calendar
构建的Calendar。
由setCalendarType
方法或locale给出的日历类型用于确定要创建的Calendar
。
如果没有显示明确的日历类型,则会创建语言环境的默认日历。
如果日历类型是"iso8601"
,则GregorianCalendar
的Gregorian change date设置为Date(Long.MIN_VALUE)
作为可疑公历。 其星期定义参数也设置为compatible with the ISO 8601 standard 。 需要注意的是getCalendarType
一个的方法GregorianCalendar
与创建"iso8601"
回报"gregory"
。
如果尚未明确给出这些参数,则默认值用于区域设置和时区。
任何超出范围的字段值都是在宽松模式下进行归一化或在非宽松模式下被检测为无效值。
Calendar
内置的这个
Calendar.Builder
IllegalArgumentException
- 如果日历类型未知,或者如果在非宽松模式下给出了无效的字段值,或者如果给出不支持周日期的日历类型的周日期。
Calendar.getInstance(TimeZone, Locale)
,
Locale.getDefault(Locale.Category)
,
TimeZone.getDefault()