public abstract class Calendar extends Object implements Serializable, Cloneable, Comparable<Calendar>
Calendar
类是一个抽象类,可以为在某一特定时刻和一组之间的转换的方法calendar fields
如YEAR
, MONTH
, DAY_OF_MONTH
, HOUR
,等等,以及用于操纵该日历字段,如获取的日期下个星期。
时间上的瞬间可以用毫秒值表示,该值是从1970年1月1日00:00 00:00.000 GMT(Gregorian)的Epoch的偏移量。
该类还提供了用于在包外部实现具体日历系统的其他字段和方法。 这些字段和方法定义为protected
。
与其他区域设置敏感的类一样, Calendar
提供了一种类方法getInstance
,用于获取此类型的一般有用的对象。 Calendar
的getInstance
方法返回一个Calendar
对象,其日历字段已使用当前日期和时间进行初始化:
Calendar rightNow = Calendar.getInstance();
Calendar
对象可以产生实现特定语言和日历风格的日期时间格式化所需的所有日历字段值(例如日语 - 公历,日语 - 繁体)。 Calendar
定义某些日历字段返回的值的范围及其含义。 例如,日历系统第一个月的值为MONTH == JANUARY
为所有日历。 其他值由具体的子类定义,如ERA
。 有关详细信息,请参阅各个实体文档和子类文档。
可以通过调用set
方法设置日历字段值。 在Calendar
设置的任何字段值将不被解释,直到它需要计算其时间值(从Epoch的毫秒)或日历字段的值。 调用get
, getTimeInMillis
, getTime
, add
和roll
涉及这样的计算。
Calendar
有两种方式来解释日历字段, 宽松和不宽泛。 当Calendar
处于宽松模式时,它接受的日历字段值范围比产生的范围更广。 当Calendar
计算日历字段值返回get()
时,所有日历字段都被归一化。 例如,宽松的GregorianCalendar
解释MONTH == JANUARY
DAY_OF_MONTH == 32
为2月1日。
当Calendar
处于非宽松模式时,如果其日历字段中存在任何不一致,则会抛出异常。 例如, GregorianCalendar
总是在1和月份之间生成DAY_OF_MONTH
值。 如果设置了超出范围的字段值,则不宽大的GregorianCalendar
会在计算其时间或日历字段值时抛出异常。
Calendar
使用两个Calendar
定义了一个特定地区的七天周:第一周的第一天和第一周的最小天数(从1到7)。
当Calendar
时,这些数字取自区域设置资源数据。
也可以通过设置其值的方法来明确指定它们。
当设置或获取WEEK_OF_MONTH
或WEEK_OF_YEAR
字段时, Calendar
必须确定月或年的第一周作为参考点。 一个月或一年的第一周被定义为最早的七天内开始对getFirstDayOfWeek()
,并含有至少getMinimalDaysInFirstWeek()
那一个月或一年的天。 星期编号...,-1,0在第一周之前; 周数为2,3,...跟随。 请注意,由get()返回的get()
可能不同。 例如,特定的Calendar
子类可以指定一年的第1周之前的一周的周一周的n
。
Calendar
将以Calendar
方式解析日历字段值以确定日期和时间。
If there is any conflict in calendar field values, Calendar
gives priorities to calendar fields that have been set more recently.以下是日历字段的默认组合。 将使用由最近设置的单个字段确定的最新组合。
For the time of day fields :YEAR + MONTH + DAY_OF_MONTH YEAR + MONTH + WEEK_OF_MONTH + DAY_OF_WEEK YEAR + MONTH + DAY_OF_WEEK_IN_MONTH + DAY_OF_WEEK YEAR + DAY_OF_YEAR YEAR + DAY_OF_WEEK + WEEK_OF_YEAR
HOUR_OF_DAY AM_PM + HOUR
如果在所选字段组合中没有设置其值的任何日历字段, Calendar
使用其默认值。 每个字段的默认值可能会因具体的日历系统而异。 例如, GregorianCalendar
,字段的默认值是相同的时代的开始:即YEAR = 1970
, MONTH = JANUARY
, DAY_OF_MONTH = 1
,等等。
注意:在某些奇异时期的解释中存在某些可能的含糊之处,其解决方式如下:
日期或时间格式字符串不是日历定义的一部分,因为这些字符串必须在运行时由用户修改或覆盖。 使用DateFormat
格式化日期。
set()
, add()
和roll()
。
set(f, value)
将日历字段f
改为value
。 此外,它设置内部成员变量以指示日历字段f
已被改变。 尽管日历字段f
立即更改,以毫秒为单位日历的时间值不重新计算,直到下一次调用get()
, getTime()
, getTimeInMillis()
, add()
,或roll()
而成。 因此,对set()
多次调用不会触发多个不必要的计算。 由于使用set()
更改日历字段,其他日历字段也可能会根据日历字段,日历字段值和日历系统而更改。 此外,在set
计算日历字段之后, get(f)
会返回value
设置的调用set
方法。 具体细节由具体的日历类确定。
示例 :考虑一个GregorianCalendar
设置为1999年8月31日的GregorianCalendar.呼叫set(Calendar.MONTH, Calendar.SEPTEMBER)
将日期设置为1999年9月31日。这是一个临时内部表示,解析为1999年10月1日,如果getTime()
被调用。 但是,在拨打set(Calendar.DAY_OF_MONTH, 30)
之前致电getTime()
将日期设置为1999年9月30日,因为set()
本身后没有重新set()
。
add(f, delta)
增加delta
到现场f
。 这相当于调用set(f, get(f) + delta)
进行了两次调整:
Add rule 1. The value of field
f
after the call minus the value of fieldf
before the call isdelta
, modulo any overflow that has occurred in fieldf
. Overflow occurs when a field value exceeds its range and, as a result, the next larger field is incremented or decremented and the field value is adjusted back into its range.Add rule 2. If a smaller field is expected to be invariant, but it is impossible for it to be equal to its prior value because of changes in its minimum or maximum after field
f
is changed or other constraints, such as time zone offset changes, then its value is adjusted to be as close as possible to its expected value. A smaller field represents a smaller unit of time.HOUR
is a smaller field thanDAY_OF_MONTH
. No adjustment is made to smaller fields that are not expected to be invariant. The calendar system determines what fields are expected to be invariant.
此外,与set()
不同, add()
强制立即重新计算日历的毫秒数和所有字段。
示例 :考虑一个GregorianCalendar
设置为1999年8月31日的add(Calendar.MONTH, 13)
呼叫add(Calendar.MONTH, 13)
将日历设置为2000年9月30日。 添加规则1将MONTH
字段设置为9月,因为在8月份添加13个月将给明年9月。 由于DAY_OF_MONTH
不能31月在GregorianCalendar
, 增加规则2套DAY_OF_MONTH
30,最接近的可能值。 虽然它是一个较小的领域, DAY_OF_WEEK
没有被规则2调整,因为预计在GregorianCalendar
的月份变化时会改变。
roll(f, delta)
增加delta
到现场f
不更改更大的字段。 这相当于调用add(f, delta)
进行以下调整:
Roll rule. Larger fields are unchanged after the call. A larger field represents a larger unit of time.
DAY_OF_MONTH
is a larger field thanHOUR
.
示例 :参见GregorianCalendar.roll(int, int)
。
使用模式 。 为了激励add()
和roll()
的行为,请考虑一个用户界面组件,其中包含月,日和年的增量和减量按钮,以及底层的GregorianCalendar
。 如果接口读取1999年1月31日,用户按月增量按钮,应该读什么? 如果基础实施使用set()
,则可能会在1999年3月3日发布。更好的结果是1999年2月28日。此外,如果用户再次按下月增加按钮,应该在1999年3月31日,而不是1999年3月28日通过保存原始日期并使用add()
或roll()
,根据是否影响较大的字段,用户界面可以像大多数用户一样直观地期待。
System.currentTimeMillis()
, Date
, GregorianCalendar
, TimeZone
, DateFormat
, Serialized Form
Modifier and Type | Class and Description |
---|---|
static class |
Calendar.Builder
Calendar.Builder 用于创建一个
Calendar 从各个日期-时间参数。
|
Modifier and Type | Field and Description |
---|---|
static int |
ALL_STYLES
getDisplayNames 的样式说明符,
表示所有样式的名称,如“1月”和“1月”。
|
static int |
AM
AM_PM 字段的值表示从午夜到中午之前的一天中的一段时间。
|
static int |
AM_PM
对于现场数
get 和
set 指示是否
HOUR 是前或中午之后。
|
static int |
APRIL
|
protected boolean |
areFieldsSet
如果
fields[] 与当前设置的时间同步,则为真。
|
static int |
AUGUST
|
static int |
DATE
get 和
set 字段编号表示该月的日期。
|
static int |
DAY_OF_MONTH
get 字段编号和
set 本月的日期。
|
static int |
DAY_OF_WEEK
get 字段编号和
set 表示一周中的日期。
|
static int |
DAY_OF_WEEK_IN_MONTH
get 字段编号和
set 当月的
set 几的序号。
|
static int |
DAY_OF_YEAR
get 和
set 字段编号,
set 本年度的日数。
|
static int |
DECEMBER
MONTH 字段的值表示公历和朱利安日历中的第十二个月。
|
static int |
DST_OFFSET
get 和
set 字段编号
get 夏令时偏移量(以毫秒为单位)。
|
static int |
ERA
get 和
set 字段号表示时代,例如在儒略历中的AD或BC。
|
static int |
FEBRUARY
MONTH 字段的价值表示今年第二个月在公历和朱利安日历。
|
static int |
FIELD_COUNT
get 和
set 的不同字段的数量。
|
protected int[] |
fields
该日历的当前设置时间的日历字段值。
|
static int |
FRIDAY
DAY_OF_WEEK 字段的值表示周五。
|
static int |
HOUR
get 和
set 字段编号,
get 上午或下午的小时。
|
static int |
HOUR_OF_DAY
get 字段编号和
set 当天的小时数。
|
protected boolean[] |
isSet
说明是否设置日历的指定日历字段的标志。
|
protected boolean |
isTimeSet
如果那么那么
time 的值是有效的。
|
static int |
JANUARY
MONTH 字段的价值表示今年首次在公历和朱利安日历。
|
static int |
JULY
|
static int |
JUNE
|
static int |
LONG
|
static int |
LONG_FORMAT
|
static int |
LONG_STANDALONE
|
static int |
MARCH
|
static int |
MAY
|
static int |
MILLISECOND
get 和
set 字段号表示
get 内的
set 数。
|
static int |
MINUTE
get 和
set 字段编号表示小时内的分钟。
|
static int |
MONDAY
DAY_OF_WEEK 字段的值表示星期一。
|
static int |
MONTH
get 和
set 字段号表示月份。
|
static int |
NARROW_FORMAT
|
static int |
NARROW_STANDALONE
|
static int |
NOVEMBER
|
static int |
OCTOBER
MONTH 字段的价值表示在公历和朱利安日历中的一年中的第十个月。
|
static int |
PM
AM_PM 字段的值表示从中午到午夜之前的一天中的一段时间。
|
static int |
SATURDAY
DAY_OF_WEEK 字段的值表示星期六。
|
static int |
SECOND
get 和
set 字段编号表示分钟内的第二个。
|
static int |
SEPTEMBER
|
static int |
SHORT
|
static int |
SHORT_FORMAT
|
static int |
SHORT_STANDALONE
|
static int |
SUNDAY
DAY_OF_WEEK 字段的值表示星期天。
|
static int |
THURSDAY
DAY_OF_WEEK 字段的值表示星期四。
|
protected long |
time
这个日历的当前设定时间,以1970年1月1日,格林尼治标准时间0:00:00之后的毫秒表示。
|
static int |
TUESDAY
DAY_OF_WEEK 字段的值表示周二。
|
static int |
UNDECIMBER
MONTH 字段的值表示一年的第十三个月。
|
static int |
WEDNESDAY
DAY_OF_WEEK 字段的值表示周三。
|
static int |
WEEK_OF_MONTH
get 和
set 字段编号,
set 当月的周数。
|
static int |
WEEK_OF_YEAR
get 和
set 字段编号,
set 本年度的周数。
|
static int |
YEAR
get 现场编号和
set 表示年份。
|
static int |
ZONE_OFFSET
get 和
set 字段编号,
get GMT以毫秒为
get 的原始偏移量。
|
Modifier | Constructor and Description |
---|---|
protected |
Calendar()
构建具有默认时区和默认的
FORMAT 语言环境的日历。
|
protected |
Calendar(TimeZone zone, Locale aLocale)
构造具有指定时区和区域设置的日历。
|
Modifier and Type | Method and Description |
---|---|
abstract void |
add(int field, int amount)
根据日历的规则,将指定的时间量添加或减去给定的日历字段。
|
boolean |
after(Object when)
返回
Calendar 是否
Calendar 指定时间之后的时间
Object 。
|
boolean |
before(Object when)
返回此
Calendar 是否
Calendar 指定的时间之前指定的时间
Object 。
|
void |
clear()
将所有的日历字段值和时间值(毫秒从偏移
Epoch如此)
Calendar 不确定。
|
void |
clear(int field)
设置给定日历字段值和时间值(毫秒从偏移
Epoch如此)
Calendar 不确定。
|
Object |
clone()
创建并返回此对象的副本。
|
int |
compareTo(Calendar anotherCalendar)
比较时间值(从毫秒偏移量
Epoch由两个表示)
Calendar 对象。
|
protected void |
complete()
填写日历字段中的任何未设置的字段。
|
protected abstract void |
computeFields()
|
protected abstract void |
computeTime()
|
boolean |
equals(Object obj)
将此
Calendar 与指定的Object进行
Object 。
|
int |
get(int field)
返回给定日历字段的值。
|
int |
getActualMaximum(int field)
给定此
Calendar 的时间值,返回指定日历字段可能具有的
Calendar 。
|
int |
getActualMinimum(int field)
给定此
Calendar 的时间值,返回指定的日历字段可以具有的
Calendar 。
|
static Set<String> |
getAvailableCalendarTypes()
返回一个不可
Set 的
Calendar ,其中包含运行时环境中
Set 支持的所有日历类型。
|
static Locale[] |
getAvailableLocales()
返回一个所有区域设置的数组,该类的
getInstance 方法可以返回本地化实例。
|
String |
getCalendarType()
返回此
Calendar 的日历类型。
|
String |
getDisplayName(int field, int style, Locale locale)
返回给定的
style 和
locale 中的日历
field 的字符串表示
locale 。
|
Map<String,Integer> |
getDisplayNames(int field, int style, Locale locale)
返回
Map 包含日历的所有名称
field 在给定
style 和
locale 及其相应的字段值。
|
int |
getFirstDayOfWeek()
得到一周的第一天是什么
例如, SUNDAY 在美国, MONDAY 在法国。
|
abstract int |
getGreatestMinimum(int field)
返回此
Calendar 实例的给定日历字段的最高最小值。
|
static Calendar |
getInstance()
使用默认时区和区域设置获取日历。
|
static Calendar |
getInstance(Locale aLocale)
使用默认时区和指定的区域设置获取日历。
|
static Calendar |
getInstance(TimeZone zone)
使用指定的时区和默认语言环境获取日历。
|
static Calendar |
getInstance(TimeZone zone, Locale aLocale)
获取具有指定时区和区域设置的日历。
|
abstract int |
getLeastMaximum(int field)
返回此
Calendar 实例的给定日历字段的最低最大值。
|
abstract int |
getMaximum(int field)
返回此
Calendar 实例的给定日历字段的
Calendar 。
|
int |
getMinimalDaysInFirstWeek()
获得一年中第一周所需的最低限度的日子;
例如,如果第一周被定义为包含一年中的第一个月的第一个星期,则此方法返回1。
|
abstract int |
getMinimum(int field)
返回此
Calendar 实例的给定日历字段的
Calendar 。
|
Date |
getTime()
|
long |
getTimeInMillis()
以毫秒为单位返回此日历的时间值。
|
TimeZone |
getTimeZone()
获取时区。
|
int |
getWeeksInWeekYear()
返回由这个
Calendar 表示的星期内的星期
Calendar 。
|
int |
getWeekYear()
返回这个
Calendar 。
|
int |
hashCode()
返回此日历的哈希码。
|
protected int |
internalGet(int field)
返回给定日历字段的值。
|
boolean |
isLenient()
告诉日期/时间的解释是否宽松。
|
boolean |
isSet(int field)
确定给定的日历字段是否具有值集,包括由
get 方法调用触发的内部字段计算设置的值。
|
boolean |
isWeekDateSupported()
返回此
Calendar 是否支持周日期。
|
abstract void |
roll(int field, boolean up)
在给定时间字段上添加或减少单个时间单位,而不改变较大的字段。
|
void |
roll(int field, int amount)
将指定(签名)金额添加到指定的日历字段,而不更改较大的字段。
|
void |
set(int field, int value)
将给定的日历字段设置为给定的值。
|
void |
set(int year, int month, int date)
设置日历字段中的值
YEAR ,
MONTH 和
DAY_OF_MONTH 。
|
void |
set(int year, int month, int date, int hourOfDay, int minute)
设置日历字段中的值
YEAR ,
MONTH ,
DAY_OF_MONTH ,
HOUR_OF_DAY 和
MINUTE 。
|
void |
set(int year, int month, int date, int hourOfDay, int minute, int second)
设置字段中的值
YEAR ,
MONTH ,
DAY_OF_MONTH ,
HOUR_OF_DAY ,
MINUTE 和
SECOND 。
|
void |
setFirstDayOfWeek(int value)
设置一周的第一天是什么?
例如, SUNDAY 在美国, MONDAY 在法国。
|
void |
setLenient(boolean lenient)
指定日期/时间解释是否宽松。
|
void |
setMinimalDaysInFirstWeek(int value)
设定一年中第一个星期所需的最短时间是多少?
例如,如果第一周被定义为包含一年中第一个月的第一天的第一周,请调用此值为1的方法。
|
void |
setTime(Date date)
使用给定的
Date 设置此日历的时间。
|
void |
setTimeInMillis(long millis)
从给定的长值设置此日历的当前时间。
|
void |
setTimeZone(TimeZone value)
以给定的时区值设置时区。
|
void |
setWeekDate(int weekYear, int weekOfYear, int dayOfWeek)
设置这个
Calendar 的日期与给定的日期说明符 - 周年,年周和星期几。
|
Instant |
toInstant()
将此对象转换为 Instant 。
|
String |
toString()
返回此日历的字符串表示形式。
|
public static final int ERA
get
和set
字段号表示时代,例如在儒略历中的AD或BC。
这是一个日历特定的值
请参阅子类文档。
public static final int YEAR
get
字段号和set
表示年份。
这是一个日历特定的值
请参阅子类文档。
public static final int MONTH
get
和set
字段编号表示月份。
这是一个特定于日历的值。
今年第一个月在公历和朱利安的日历是JANUARY
这是0;
最后一个取决于一年中的月数。
public static final int WEEK_OF_YEAR
get
和set
字段编号, set
本年度的周数。
在今年的第一个星期,由定义getFirstDayOfWeek()
和getMinimalDaysInFirstWeek()
,具有值为1的子类定义的值WEEK_OF_YEAR
今年的第一周前几天。
public static final int WEEK_OF_MONTH
get
和set
字段编号, set
当月的周数。
这个月的第一个星期,被定义getFirstDayOfWeek()
和getMinimalDaysInFirstWeek()
,具有值为1的子类定义的值WEEK_OF_MONTH
月份的第一个星期之前的天。
public static final int DATE
get
字段编号和set
本月的日期。
这是DAY_OF_MONTH
的同义词。
本月的第一天价值为1。
DAY_OF_MONTH
,
Constant Field Values
public static final int DAY_OF_MONTH
get
字段编号和set
本月的日期。
这是DATE
的同义词。
本月的第一天价值为1。
DATE
,
Constant Field Values
public static final int DAY_OF_YEAR
get
和set
字段编号, set
本年度的日数。
今年第一天的价值为1。
public static final int DAY_OF_WEEK
get
和set
字段编号, get
星期几。
此字段值SUNDAY
, MONDAY
, TUESDAY
, WEDNESDAY
, THURSDAY
, FRIDAY
和SATURDAY
。
public static final int DAY_OF_WEEK_IN_MONTH
get
和set
字段编号, get
set
几的序数。
与DAY_OF_WEEK
字段一起,它独特地指定了一个月内的一天。
不像WEEK_OF_MONTH
和WEEK_OF_YEAR
,该字段的值并不取决于getFirstDayOfWeek()
或getMinimalDaysInFirstWeek()
。
DAY_OF_MONTH 1
至7
始终对应DAY_OF_WEEK_IN_MONTH 1
;
8
至14
对应于DAY_OF_WEEK_IN_MONTH 2
,依此类推。
DAY_OF_WEEK_IN_MONTH 0
表示前一周DAY_OF_WEEK_IN_MONTH 1
。
负值从月底开始计数,所以一个月的最后一个星期日指定为DAY_OF_WEEK = SUNDAY, DAY_OF_WEEK_IN_MONTH = -1
。
因为负数值倒计时,所以在一个月内通常会与正值不一致。
例如,如果在一个月有31天, DAY_OF_WEEK_IN_MONTH -1
将重叠DAY_OF_WEEK_IN_MONTH 5
和的末端4
。
DAY_OF_WEEK
,
WEEK_OF_MONTH
,
Constant Field Values
public static final int AM_PM
get
和set
指示是否HOUR
是前或中午之后。
例如,在10:04:15.250 PM, AM_PM
是PM
。
AM
,
PM
,
HOUR
,
Constant Field Values
public static final int HOUR
get
和set
字段编号, get
上午或下午的小时。
HOUR
用于12小时钟(0 - 11)。
中午和午夜由0而不是12表示。例如,在10:04:15.250 PM, HOUR
是10。
AM_PM
,
HOUR_OF_DAY
,
Constant Field Values
public static final int HOUR_OF_DAY
get
字段编号和set
当天的小时数。
HOUR_OF_DAY
用于24小时制。
例如:10:04:15.250 PM, HOUR_OF_DAY
是22。
HOUR
,
Constant Field Values
public static final int MINUTE
get
和set
字段编号表示小时内的分钟。
例如,10:04:15.250 PM, MINUTE
是4。
public static final int SECOND
get
字段编号和set
表示分钟内的第二个。
例如:10:04:15.250 PM, SECOND
是15。
public static final int MILLISECOND
get
和set
字段号表示get
内的set
数。
例如:10:04:15.250 PM, MILLISECOND
是250。
public static final int ZONE_OFFSET
get
和set
字段编号get
GMT以毫秒为get
的原始偏移量。
如果TimeZone
实现子类支持历史GMT偏移量更改,则此字段反映该Calendar
的时区的正确GMT偏移值。
public static final int DST_OFFSET
get
和set
字段编号get
以set
单位的夏令时偏移量。
如果TimeZone
实现子类支持历史夏令时计划更改,则此字段反映该Calendar
的时区正确的夏令时偏移值。
public static final int FIELD_COUNT
get
和set
的不同字段的数量。
字段编号范围为0..FIELD_COUNT-1
。
public static final int SUNDAY
DAY_OF_WEEK
字段的值表示星期天。
public static final int MONDAY
DAY_OF_WEEK
字段的值表示星期一。
public static final int TUESDAY
DAY_OF_WEEK
字段的值表示星期二。
public static final int WEDNESDAY
DAY_OF_WEEK
字段的值表示周三。
public static final int THURSDAY
DAY_OF_WEEK
字段的值表示周四。
public static final int FRIDAY
DAY_OF_WEEK
字段的值表示周五。
public static final int SATURDAY
DAY_OF_WEEK
字段的值表示星期六。
public static final int JANUARY
MONTH
字段的值表示今年首次在公历和朱利安日历。
public static final int FEBRUARY
MONTH
字段的价值显示了今年第二个月在格里高利和朱利安日历。
public static final int MARCH
MONTH
字段表示今年第三个月在公历和朱利安日历。
public static final int APRIL
MONTH
字段的价值表示今年第四个月在公历和朱利安日历。
public static final int MAY
public static final int JUNE
public static final int JULY
public static final int AUGUST
public static final int SEPTEMBER
public static final int OCTOBER
public static final int NOVEMBER
public static final int DECEMBER
MONTH
字段的值代表公历和朱利安日历中的第十二个月。
public static final int UNDECIMBER
MONTH
字段的值表示一年的第十三个月。
虽然GregorianCalendar
不使用这个值,但是月球的日历也是这样。
public static final int AM
AM_PM
字段的值表示从午夜到中午之前的一天中的一段时间。
public static final int PM
AM_PM
字段的值表示从中午到午夜之前的一天中的一段时间。
public static final int ALL_STYLES
getDisplayNames
的样式说明符,
指示所有样式的名称,例如“1月”和“1月”。
SHORT_FORMAT
,
LONG_FORMAT
,
SHORT_STANDALONE
,
LONG_STANDALONE
,
SHORT
,
LONG
,
Constant Field Values
public static final int SHORT
SHORT_STANDALONE
,
LONG
,
Constant Field Values
public static final int LONG
LONG_STANDALONE
,
SHORT
,
Constant Field Values
public static final int NARROW_FORMAT
getDisplayName
和getDisplayNames
的样式说明符 , 表示用于格式的窄名称。
狭义名称通常是单个字符串,例如星期一的“M”。
NARROW_STANDALONE
,
SHORT_FORMAT
,
LONG_FORMAT
,
Constant Field Values
public static final int NARROW_STANDALONE
getDisplayName
和getDisplayNames
的样式说明符 独立地表示一个狭义的名称。
狭义名称通常是单个字符串,例如星期一的“M”。
NARROW_FORMAT
,
SHORT_STANDALONE
,
LONG_STANDALONE
,
Constant Field Values
public static final int SHORT_FORMAT
SHORT_STANDALONE
,
LONG_FORMAT
,
LONG_STANDALONE
,
Constant Field Values
public static final int LONG_FORMAT
LONG_STANDALONE
,
SHORT_FORMAT
,
SHORT_STANDALONE
,
Constant Field Values
public static final int SHORT_STANDALONE
SHORT_FORMAT
,
LONG_FORMAT
,
LONG_STANDALONE
,
Constant Field Values
public static final int LONG_STANDALONE
LONG_FORMAT
,
SHORT_FORMAT
,
SHORT_STANDALONE
,
Constant Field Values
protected int[] fields
FIELD_COUNT
整数的数组,索引值为ERA
至DST_OFFSET
。
protected boolean[] isSet
FIELD_COUNT
布尔数组,索引值为ERA
至DST_OFFSET
。
protected long time
isTimeSet
protected boolean isTimeSet
time
的值是有效的。
通过更改field[]
的项目, field[]
。
time
protected boolean areFieldsSet
fields[]
与当前设置的时间同步,则为真。
如果为假,则在下一次试图获得某一字段的值,将迫使各个领域的重新计算从当前值time
。
protected Calendar()
FORMAT
区域设置的日历。
TimeZone.getDefault()
public static Calendar getInstance()
Calendar
返回的是基于默认时区的当前时间,默认为FORMAT
区域设置。
public static Calendar getInstance(TimeZone zone)
Calendar
返回的是基于指定时区的当前时间,默认为FORMAT
区域设置。
zone
- 使用的时区
public static Calendar getInstance(Locale aLocale)
Calendar
返回的是基于指定区域设置的默认时区中的当前时间。
aLocale
- 周数据的区域设置
public static Calendar getInstance(TimeZone zone, Locale aLocale)
Calendar
返回的是基于给定时区的当前时间与给定的区域设置。
zone
- 使用的时区
aLocale
- 周数据的区域设置
public static Locale[] getAvailableLocales()
getInstance
方法可以返回本地化实例。
返回的数组必须至少包含一个等于Locale.US
的Locale
实例。
Calendar
实例可用。
protected abstract void computeTime()
complete()
,
computeFields()
protected abstract void computeFields()
computeTime()
public final Date getTime()
Date
代表时间值。
setTime(Date)
,
getTimeInMillis()
public final void setTime(Date date)
Date
设置此日历的时间。
注意:致电setTime()
与Date(Long.MAX_VALUE)
或Date(Long.MIN_VALUE)
可能会产生不正确的字段值从get()
。
date
- 给定的日期。
getTime()
,
setTimeInMillis(long)
public long getTimeInMillis()
getTime()
,
setTimeInMillis(long)
public void setTimeInMillis(long millis)
millis
- 从时代以UTC为单位的新时间。
setTime(Date)
,
getTimeInMillis()
public int get(int field)
complete()
方法处理,该过程是与日历系统相关的。
field
- 给定的日历字段。
ArrayIndexOutOfBoundsException
- 如果指定的字段超出范围(
field < 0 || field >= FIELD_COUNT
)。
set(int,int)
,
complete()
protected final int internalGet(int field)
field
- 给定的日历字段。
get(int)
public void set(int field, int value)
field
- 给定的日历字段。
value
- 要为给定日历字段设置的值。
ArrayIndexOutOfBoundsException
- 如果指定的字段超出范围( field < 0 || field >= FIELD_COUNT
)。
在非宽松模式下。
set(int,int,int)
,
set(int,int,int,int,int)
,
set(int,int,int,int,int,int)
,
get(int)
public final void set(int year, int month, int date)
year
- 用于设置
YEAR
日历字段的值。
month
- 用于设置MONTH
日历字段的值。
月值为0。
例如,1月份为0。
date
- 用于设置
DAY_OF_MONTH
日历字段的值。
set(int,int)
,
set(int,int,int,int,int)
,
set(int,int,int,int,int,int)
public final void set(int year, int month, int date, int hourOfDay, int minute)
year
- 用于设置
YEAR
日历字段的值。
month
- 用于设置MONTH
日历字段的值。
月值为0。
例如,1月份为0。
date
- 用于设置
DAY_OF_MONTH
日历字段的值。
hourOfDay
- 用于设置
HOUR_OF_DAY
日历字段的值。
minute
- 用于设置
MINUTE
日历字段的值。
set(int,int)
,
set(int,int,int)
,
set(int,int,int,int,int,int)
public final void set(int year, int month, int date, int hourOfDay, int minute, int second)
YEAR
, MONTH
, DAY_OF_MONTH
, HOUR_OF_DAY
, MINUTE
和SECOND
。
保留其他字段的以前的值。
如果不希望, 请先拨打电话clear()
。
year
- 用于设置
YEAR
日历字段的值。
month
- 用于设置MONTH
日历字段的值。
月值为0。
例如,1月份为0。
date
- 用于设置
DAY_OF_MONTH
日历字段的值。
hourOfDay
- 用于设置
HOUR_OF_DAY
日历字段的值。
minute
- 用于设置
MINUTE
日历字段的值。
second
- 用于设置
SECOND
日历字段的值。
set(int,int)
,
set(int,int,int)
,
set(int,int,int,int,int)
public final void clear()
Calendar
不确定。
这意味着isSet()
将返回所有日历字段的false
,并且日期和时间计算会将这些字段视为未被设置的字段。
Calendar
实现类可以使用其特定的默认字段值进行日期/时间计算。
例如, GregorianCalendar
使用1970,如果YEAR
字段值未定义。
clear(int)
public final void clear(int field)
Calendar
不确定。
这意味着isSet(field)
将返回false
,日期和时间的计算将会将该字段视为未被设置。
Calendar
实现类可以使用字段的特定默认值进行日期和时间计算。
的HOUR_OF_DAY
, HOUR
和AM_PM
字段独立地处理,并且the resolution rule for the time of day被应用。 清除其中一个字段不会重置此Calendar
的小时值。 使用set(Calendar.HOUR_OF_DAY, 0)
重置小时值。
field
- 要清除的日历字段。
clear()
public final boolean isSet(int field)
get
方法调用触发的内部字段计算设置的值的情况。
field
- 要测试的日历字段
true
如果给定的日历字段具有值集合;
false
否则。
public String getDisplayName(int field, int style, Locale locale)
style
和locale
中的日历field
的字符串表示locale
。
如果不适用字符串表示,则返回null
。
如果字符串表示适用于给定日历field
,则此方法调用get(field)
获取日历field
值。
例如,如果这个Calendar
是GregorianCalendar
,其日期是2005-01-01,那么MONTH
字段的字符串表示法将是英文语言环境中的长形式的“1月”或短格式的“Jan”。 但是, DAY_OF_MONTH
字段不能使用字符串表示,此方法将返回null
。
默认实现支持在给定的locale
中具有DateFormatSymbols
名称的日历字段。
field
- 返回字符串表示形式的日历字段
style
- 应用于字符串表示形式的样式;
之一SHORT_FORMAT
( SHORT
), SHORT_STANDALONE
, LONG_FORMAT
( LONG
), LONG_STANDALONE
, NARROW_FORMAT
,或NARROW_STANDALONE
。
locale
- 字符串表示的区域设置(由
locale
任何日历类型都将被忽略)
field
在给定的
style
字符串表示,或
null
如果没有字符串表示是适用的。
IllegalArgumentException
- 如果
field
或
style
无效,或者如果此
Calendar
不宽松,并且任何日历字段具有无效值
NullPointerException
- 如果
locale
为空
public Map<String,Integer> getDisplayNames(int field, int style, Locale locale)
Map
包含日历的所有名称field
在给定style
和locale
及其相应的字段值。
例如,如果这个Calendar
是GregorianCalendar
,返回的地图将包含“Jan”到JANUARY
,“Feb”到FEBRUARY
,依此类推,在short的英文语言环境中。
由于使用单个字符(例如星期日和星期六的“S”),狭义名称可能不是唯一的。 在这种情况下,缩小的名称不包括在返回的Map
。
可以考虑其他日历字段的值来确定一组显示名称。 例如,如果这个Calendar
是一个月历日历系统,并且由YEAR
字段给出的年值有一个闰月,这个方法将返回包含闰月名称的月份名称,并且月份名称映射到其年份特定的值。
默认实现支持包含在显示名称DateFormatSymbols
。 例如,如果field
是MONTH
和style
是ALL_STYLES
,则此方法返回一个Map
DateFormatSymbols.getShortMonths()
和DateFormatSymbols.getMonths()
返回的所有字符串的Map 。
field
- 显示名称返回的日历字段
style
- 应用于字符串表示形式的样式;
之一SHORT_FORMAT
( SHORT
), SHORT_STANDALONE
, LONG_FORMAT
( LONG
), LONG_STANDALONE
, NARROW_FORMAT
,或NARROW_STANDALONE
locale
- 显示名称的区域设置
Map
包含所有显示名称在
style
和
locale
及其字段值,或
null
如果没有为
field
定义显示名称
IllegalArgumentException
- 如果
field
或
style
无效,或者如果此
Calendar
不宽松,并且任何日历字段具有无效值
NullPointerException
- 如果
locale
为空
protected void complete()
computeTime()
如果时间值(从毫秒偏移方法称为Epoch )尚未从日历字段值来计算。
然后,调用computeFields()
方法来计算所有日历字段值。
public static Set<String> getAvailableCalendarTypes()
Set
的Calendar
,其中包含运行时环境中Set
支持的所有日历类型。
可用的日历类型可以用于Unicode locale extensions 。
返回的Set
至少包含"gregory"
。
日历类型不包括别名,例如"gregorian"
for "gregory"
。
Set
包含所有可用的日历类型
getCalendarType()
,
Calendar.Builder.setCalendarType(String)
,
Locale.getUnicodeLocaleType(String)
public String getCalendarType()
Calendar
的日历类型。
日历类型由Unicode区域设置数据标记语言(LDML)规范定义。
此方法的默认实现返回此Calendar
实例的类名。 任何实现LDML定义的日历系统的子类都应该覆盖此方法以返回适当的日历类型。
Calendar
实例的类名称
Locale.Builder.setLocale(Locale)
,
Locale.Builder.setUnicodeLocaleKeyword(String, String)
public boolean equals(Object obj)
Calendar
与指定的Object进行Object
。
其结果是true
当且仅当参数是Calendar
表示相同的时间值(毫秒从偏移相同的日历系统的对象Epoch下相同) Calendar
参数作为该对象。
的Calendar
参数是由表示的值isLenient
, getFirstDayOfWeek
, getMinimalDaysInFirstWeek
和getTimeZone
方法。 如果两个Calendar
之间的Calendar
有任何差异,则此方法返回false
。
使用compareTo
方法只比较时间值。
equals
在类别
Object
obj
- 要比较的对象。
true
如果这个对象等于obj
;
false
否则。
Object.hashCode()
, HashMap
public int hashCode()
hashCode
在类别
Object
Object.equals(java.lang.Object)
,
System.identityHashCode(java.lang.Object)
public boolean before(Object when)
Calendar
是否Calendar
指定的时间之前指定的时间Object
。
此方法相当于:
compareTo(when) < 0
当且仅当when
是Calendar
实例。
否则,该方法返回false
。
when
- 要比较的
Object
true
如果此时Calendar
是由下式表示的时间之前when
;
false
否则。
compareTo(Calendar)
public boolean after(Object when)
Calendar
表示由指定代表的时间之后的时间Object
。
此方法相当于:
compareTo(when) > 0
当且仅当when
是Calendar
实例。
否则,该方法返回false
。
when
- 要比较的
Object
true
如果此时Calendar
是由下式表示的时间之后when
;
false
否则。
compareTo(Calendar)
public int compareTo(Calendar anotherCalendar)
Calendar
对象。
compareTo
在接口
Comparable<Calendar>
anotherCalendar
- 要比较的
Calendar
。
0
如果由所述参数表示的时间等于由此表示的时间Calendar
;
的值小于0
如果此时Calendar
是由参数表示的时间之前;
如果Calendar
的时间在参数表示的时间之后,则值大于0
。
NullPointerException
- 如果指定的
Calendar
是
null
。
IllegalArgumentException
- 如果由于任何无效的日历值而无法获取指定的
Calendar
对象的时间值。
public abstract void add(int field, int amount)
add(Calendar.DAY_OF_MONTH, -5)
。
field
- 日历字段。
amount
- 要添加到该字段的日期或时间的数量。
roll(int,int)
,
set(int,int)
public abstract void roll(int field, boolean up)
roll(Calendar.DATE,true)。 当年度滚动或Calendar.YEAR字段时,它将滚动年值在1和通过调用getMaximum(Calendar.YEAR)
返回的值之间的范围。 当月滚动或Calendar.MONTH字段时,其他字段如date可能会冲突,需要更改。 例如,在01/31/96日期滚动的月份将在02/29/96。 在日历或Calendar.HOUR_OF_DAY字段中滚动时,它将滚动小时值,范围在0到23之间,这是从零开始的。
field
- 时间字段。
up
- 指示指定时间字段的值是要卷起还是滚动。
如果卷起,请使用true,否则为false。
add(int,int)
,
set(int,int)
public void roll(int field, int amount)
注意:这对默认实现Calendar
只是反复调用的版本roll()
由一个单元辊子。 这可能不总是做正确的事情。 例如,如果DAY_OF_MONTH
字段为31,则滚动到二月将会将其设置为28.该功能的GregorianCalendar
版本负责处理此问题。 其他子类也应该提供这个功能的覆盖,做正确的事情。
field
- 日历字段。
amount
- 添加到日历中的签名金额
field
。
roll(int,boolean)
,
add(int,int)
,
set(int,int)
public void setTimeZone(TimeZone value)
value
- 给定的时区。
public TimeZone getTimeZone()
public void setLenient(boolean lenient)
lenient
- true
如果宽大模式要打开;
false
如果要关闭。
isLenient()
,
DateFormat.setLenient(boolean)
public boolean isLenient()
true
如果这个日历的解释模式是宽松的;
false
否则。
setLenient(boolean)
public void setFirstDayOfWeek(int value)
SUNDAY
在美国, MONDAY
在法国。
value
- 一周的给定的第一天。
getFirstDayOfWeek()
,
getMinimalDaysInFirstWeek()
public int getFirstDayOfWeek()
SUNDAY
在美国, MONDAY
在法国。
setFirstDayOfWeek(int)
,
getMinimalDaysInFirstWeek()
public void setMinimalDaysInFirstWeek(int value)
value
- 一年中第一周所需的最短日期。
getMinimalDaysInFirstWeek()
public int getMinimalDaysInFirstWeek()
setMinimalDaysInFirstWeek(int)
public boolean isWeekDateSupported()
Calendar
是否支持周日期。
此方法的默认实现返回false
。
true
如果这个Calendar
支持周日期;
false
否则。
getWeekYear()
,
setWeekDate(int,int,int)
,
getWeeksInWeekYear()
public int getWeekYear()
Calendar
。
周周与周周期同步。
first day of the first week是本周的第一天。
此方法的默认实现会抛出一个UnsupportedOperationException
。
Calendar
UnsupportedOperationException
- 如果这个
Calendar
不支持任何一周的
Calendar
。
isWeekDateSupported()
,
getFirstDayOfWeek()
,
getMinimalDaysInFirstWeek()
public void setWeekDate(int weekYear, int weekOfYear, int dayOfWeek)
Calendar
的日期与给定的日期说明符 - 周年,年份和星期几。
与set
方法不同,所有日历字段和time
值都将在返回时计算。
如果weekOfYear
的有效weekYear
范围weekYear
,则weekYear
和weekOfYear
值在宽松模式下调整,或者IllegalArgumentException
被抛出非宽松模式。
此方法的默认实现会抛出一个UnsupportedOperationException
。
weekYear
- 周年
weekOfYear
- 周数基于
weekYear
dayOfWeek
- 星期几值:
DAY_OF_WEEK
字段的
常数之一:
SUNDAY
,...,
SATURDAY
。
IllegalArgumentException
- 如果任何给定的日期说明符无效或任何日历字段与非宽松模式中的给定日期说明符不一致
UnsupportedOperationException
- 如果这个
Calendar
不支持任何一周的
Calendar
。
isWeekDateSupported()
,
getFirstDayOfWeek()
,
getMinimalDaysInFirstWeek()
public int getWeeksInWeekYear()
Calendar
表示的星期内的星期Calendar
。
此方法的默认实现会抛出一个UnsupportedOperationException
。
UnsupportedOperationException
- 如果这个
Calendar
不支持任何一周的
Calendar
。
WEEK_OF_YEAR
,
isWeekDateSupported()
,
getWeekYear()
,
getActualMaximum(int)
public abstract int getMinimum(int field)
field
- 日历字段。
getMaximum(int)
,
getGreatestMinimum(int)
,
getLeastMaximum(int)
,
getActualMinimum(int)
,
getActualMaximum(int)
public abstract int getMaximum(int field)
field
- 日历字段。
getMinimum(int)
,
getGreatestMinimum(int)
,
getLeastMaximum(int)
,
getActualMinimum(int)
,
getActualMaximum(int)
public abstract int getGreatestMinimum(int field)
field
- 日历字段。
getMinimum(int)
,
getMaximum(int)
,
getLeastMaximum(int)
,
getActualMinimum(int)
,
getActualMaximum(int)
public abstract int getLeastMaximum(int field)
Calendar
实例的给定日历字段的最低最大值。
最低最大值被定义为getActualMaximum(int)
对于任何可能的时间值返回的最小值 。
最小值取决于实例的日历系统特定参数。
例如, Calendar
为公历的系统为DAY_OF_MONTH
字段返回28,因为第28个是这个日历的最短的月份的最后一天,2月是一个普通的年份。
field
- 日历字段。
getMinimum(int)
,
getMaximum(int)
,
getGreatestMinimum(int)
,
getActualMinimum(int)
,
getActualMaximum(int)
public int getActualMinimum(int field)
Calendar
的时间值,返回指定日历字段可能具有的Calendar
。
该方法的默认实现使用迭代算法来确定日历字段的实际最小值。 如果可能,子类应该用更有效的实现来覆盖它 - 在许多情况下,它们可以简单地返回getMinimum()
。
field
- 日历字段
Calendar
的时间值的给定日历字段的
Calendar
getMinimum(int)
,
getMaximum(int)
,
getGreatestMinimum(int)
,
getLeastMaximum(int)
,
getActualMaximum(int)
public int getActualMaximum(int field)
Calendar
的时间值,返回指定日历字段可能具有的Calendar
。
例如, MONTH
字段的实际最大值在MONTH
内为12,在希伯来语日历系统中的其他年份为13。
该方法的默认实现使用迭代算法来确定日历字段的实际最大值。 如果可能,子类应该用更有效的实现来覆盖它。
field
- 日历字段
Calendar
的时间值的给定日历字段的
Calendar
getMinimum(int)
,
getMaximum(int)
,
getGreatestMinimum(int)
,
getLeastMaximum(int)
,
getActualMinimum(int)
public String toString()
null
。