public abstract class Calendar
extends Object
implements Serializable, Cloneable, Comparable<Calendar>
java.lang.Object | |
↳ | android.icu.util.Calendar |
Known Direct Subclasses |
Known Indirect Subclasses |
[icu增强] ICU的替代Calendar
。 ICU特有的方法,字段和其他功能标记为“ [icu] ”。
Calendar
为之间转换一个抽象基类Date
对象和一组整数字段如YEAR
, MONTH
, DAY
, HOUR
,等等。 (A Date
对象表示在时间上与毫秒精度特定的瞬间。参见Date
有关信息Date
类)。
的子类Calendar
解释一个Date
根据特定的日历系统的规则。 ICU4J包含多个实现不同国际日历系统的子类。
像其他区域敏感类一样, Calendar
提供了一个类方法, getInstance
,用于获取此类型的通用对象。 Calendar
的getInstance
方法返回适合区域设置的类型的日历,其时间字段已用当前日期和时间初始化:
Calendar rightNow = Calendar.getInstance()
ULocale
使用getInstance
,如果存在,则会检索其“ calendar
”标记和值。 如果提供了认可的值,则会提供日历并根据需要进行配置。 目前公认的标签是“佛教”,“中国”,“科普特”,“ethiopic”,“格列高利”,“希伯来”,“伊斯兰”,“伊斯兰民间”,“日本”和“roc”。 例如:
will return an instance of JapaneseCalendar (using en_US conventions for minimum days in first week, start day of week, et cetera).Calendar cal = Calendar.getInstance(new ULocale("en_US@calendar=japanese"));
一个Calendar
对象可以生成实现特定语言和日历样式(例如,Japanese-Gregorian,Japanese-Traditional)的日期时间格式所需的所有时间字段值。 Calendar
定义了某些字段返回的值的范围,以及它们的含义。 例如,对于所有日历,今年的第一个月的值为MONTH
== JANUARY
。 其他值由具体子类定义,例如ERA
和YEAR
。 有关详细信息,请参阅个别字段文档和子类文档。
当一个Calendar
是宽松的 ,它接受比它产生更广泛的字段值。 例如,宽松GregorianCalendar
解释MONTH
== JANUARY
, DAY_OF_MONTH
== 32 2月1日的非宽松GregorianCalendar
给定外的范围字段设置时抛出异常。 当日历重新计算字段值以返回get()
,它们将它们归一化。 例如,一个GregorianCalendar
始终会生成1和月份长度之间的DAY_OF_MONTH
值。
Calendar
使用两个参数来定义特定于区域的七天周:一周的第一天和第一周的最小日期(从1到7)。 当构建Calendar
时,这些数字取自语言环境资源数据。 它们也可以通过API明确指定。
在设置或获取WEEK_OF_MONTH
或WEEK_OF_YEAR
字段时, Calendar
必须将该月份或年份的第一周确定为参考点。 一个月或一年的第一周被定义为从getFirstDayOfWeek()
开始的最早的七天期间,并且该月或该年至少包含getMinimalDaysInFirstWeek()
天。 在第一周之前,编号为......,-1,0的周; 编号2,3,...的周数跟随它。 请注意,由get()
返回的规范化编号可能不同。 例如,特定的Calendar
子类可以指定一年的第1周之前一周作为上一年的第n周。
从时间字段计算 Date
时,可能会出现一些特殊情况:可能没有足够的信息来计算 Date
(例如,仅年,月但本月没有日期),可能存在不一致的信息(例如“7月2日,星期二1996年6月15日“ - 1996年7月15日实际上是一个星期一),或者由于时区转换,输入时间可能不明确。
信息不足。 日历将使用默认信息来指定缺少的字段。 这可能因日历而异; 对于公历日历,字段的默认值与历元开头的默认值相同:即YEAR = 1970,MONTH = JANUARY,DATE = 1等。
信息不一致。 如果字段冲突,则日历将优先考虑最近设置的字段。 例如,确定日期时,日历将查找以下字段组合之一。 将使用由最近设置的单个字段确定的最近的组合。
For the time of day:MONTH + DAY_OF_MONTH MONTH + WEEK_OF_MONTH + DAY_OF_WEEK MONTH + DAY_OF_WEEK_IN_MONTH + DAY_OF_WEEK DAY_OF_YEAR DAY_OF_WEEK + WEEK_OF_YEAR
HOUR_OF_DAY AM_PM + HOUR
模糊的挂钟时间。 当UTC的时间偏移发生变化时,它会在转换周围产生一个模糊的时隙。 例如,许多美国地区都遵守夏令时。 在美国切换到夏令时的日期,挂钟时间从12:59 AM(标准)跳到凌晨2:00(日光)。 因此,挂钟时间从凌晨1点到上午1点59分不存在。 当输入延迟时间落入此缺失时间段时,默认情况下,ICU日历会在转换之前使用UTC偏移量来解析时间。 在这个例子中,1:30 AM被解释为标准时间1:30 AM(不存在),所以最终结果将是白天2:30 AM。
在切换回标准时间的日期中,挂钟时间在凌晨2:00移回一小时。 所以从上午1点到下午1点59分的挂钟时间会发生两次。 在这种情况下,默认情况下,ICU日历会在转换后使用UTC偏移量来解析时间。 例如,日期上午1点30分解析为标准时间1:30 AM。
日历API setRepeatedWallTimeOption(int)
和setSkippedWallTimeOption(int)
可以自定义不明确的挂钟时间解析行为。 这些方法在ICU 49或更高版本中可用。
注意:对于一些非公历日历,可能需要不同的字段才能完全消除歧义。 例如,在某些情况下,历史阿拉伯天文日历的完整规范要求年,月,日和星期几。
注意:在某些单数时间的解释中可能存在一些含糊不清的情况,这些问题可以通过以下方式解决:
日期或时间格式字符串不是日历定义的一部分,因为这些字符串在运行时必须可由用户修改或覆盖。 使用DateFormat
格式化日期。
现场操作方法
Calendar
:字段可以用三种方法来改变 set()
, add()
,并 roll()
。
set(f, value)
变化领域f
至value
。 另外,它设置一个内部成员变量来指示字段f
已被更改。 虽然场f
立即更改,日历的毫秒不重新计算,直到下一个电话get()
, getTime()
,或getTimeInMillis()
而成。 因此,多次调用set()
不会触发多次不必要的计算。 作为使用set()
更改字段的结果,其他字段也可能会更改,具体取决于字段,字段值和日历系统。 另外,在字段重新计算后, get(f)
不一定会返回value
。 细节由具体的日历类决定。
例如 :考虑一个GregorianCalendar
最初被设置为1999调用8月31日, set(Calendar.MONTH, Calendar.SEPTEMBER)
套日历9月31日,1999年这是一个临时的内部表示解析为1999年10月1日,如果getTime()
,然后调用。 但是,在致电set(Calendar.DAY_OF_MONTH, 30)
之前致电getTime()
日历设置为1999年9月30日,因为在set()
本身之后不会发生重新计算。
add(f, delta)
增加delta
现场f
。 这相当于通过两次调整调用set(f, get(f) + delta)
:
添加规则1 。 字段的值
f
通话减去字段的值后f
呼叫之前是delta
,模内所出现的字段中的任何溢出f
。 当字段值超出其范围时会发生溢出,因此,下一个较大的字段会递增或递减,并将字段值调整回其范围。添加规则2 。 如果一个较小的场预计是不变的,但由于场
f
改变后其最小值或最大值发生变化,它不可能等于其先前值,所以它的值被调整为尽可能接近其值期望值。 较小的字段代表较小的时间单位。HOUR
是比DAY_OF_MONTH
小的字段。 没有对不期望不变的小字段进行调整。 日历系统确定哪些字段预期是不变的。
另外,与 set()
不同, add()
强制立即重新计算日历的毫秒数和所有字段。
例如 :考虑一个GregorianCalendar
最初被设置为1999调用8月31日, add(Calendar.MONTH, 13)
套日历9月30日,2000年添加规则1套MONTH
场至九月,因为加入13个月月给明年九月。 由于DAY_OF_MONTH
在GregorianCalendar
中的9月份不能为31,因此添加规则2 DAY_OF_MONTH
设置为30,即最接近的可能值。 虽然它是一个较小的字段,但DAY_OF_WEEK
规则2进行调整,因为当月份更改为GregorianCalendar
时,预计会发生更改。
roll(f, delta)
增加delta
现场f
,不更改更大的字段。 这相当于通过以下调整调用add(f, delta)
:
滚动规则 。 通话结束后,较大的字段保持不变。 较大的字段代表较大的时间单位。
DAY_OF_MONTH
是比HOUR
更大的字段。
例如 :考虑一个GregorianCalendar
最初被设置为1999调用8月31日, roll(Calendar.MONTH, 8)
套日历1999年 4月30日。 添加规则1将MONTH
字段设置为4月。 使用GregorianCalendar
,该DAY_OF_MONTH
不能在一个月四月是31。 添加规则2将其设置为最接近的可能值30。最后, 滚动规则保持1999年的YEAR
字段值。
例如 :考虑最初设置为1999年6月6日星期日的GregorianCalendar
调用roll(Calendar.WEEK_OF_MONTH, -1)
将日历设置为1999年6月1日星期二,而致电add(Calendar.WEEK_OF_MONTH, -1)
将日历设置为1999年5月30日星期日。这是因为滚动规则会施加一个附加约束:该MONTH
当不能改变WEEK_OF_MONTH
卷。 结合添加规则1,结果日期必须介于6月1日星期二到6月5日星期六之间。根据添加规则DAY_OF_WEEK
(一个改变WEEK_OF_MONTH
时的不变量)设置为星期二,这是到周日最接近的可能值(其中周日是本周的第一天)。
用法模型 。 为了激发add()
和roll()
的行为,请考虑一个用户界面组件,其中包含月份,日期和年份的增量和减量按钮以及基础GregorianCalendar
。 如果界面显示为1999年1月31日,并且用户按下月份增量按钮,那么它应该读取什么? 如果底层实现使用set()
,它可能会在1999年3月3日阅读。更好的结果是1999年2月28日。此外,如果用户再次按下月份增量按钮,则应该阅读1999年3月31日,而不是1999年3月28日。通过保存原始日期并使用add()
或roll()
,取决于是否应该影响较大的字段,用户界面可以按大多数用户直观预期的方式行事。
注意:您应始终使用roll
和add
而不是尝试直接在Calendar的字段上执行算术运算。 Calendar子类非常有可能具有非线性行为的字段,例如在非闰年期间丢失了几个月或几天。 子类' add和roll方法将考虑到这一点,而简单的算术操作可能会导致无效的结果。
ICU4J中的日历体系结构
最近,为了更好地支持子类化, Calendar
的实现发生了显着变化。 原来的Calendar
类被设计为支持子类化,但它只有一个实现的子类, GregorianCalendar
。 随着一些新的日历的子类,包括实施BuddhistCalendar
, ChineseCalendar
, HebrewCalendar
, IslamicCalendar
,并JapaneseCalendar
,该子类API已经被彻底重新设计。 本节详细介绍了新的子类的API和其他方式, android.icu.util.Calendar
不同于java.util.Calendar
。
变化
经典 Calendar
架构与新架构之间的变化概述。
fields[]
array is private
now instead of protected
. Subclasses must access it using the methods internalSet(int, int)
and internalGet(int)
. Motivation: Subclasses should not directly access data members.time
long word is private
now instead of protected
. Subclasses may access it using the method internalGetTimeInMillis()
, which does not provoke an update. Motivation: Subclasses should not directly access data members.Calendar
base class. As a result, it is much easier to subclass Calendar
. Motivation: Subclasses should not have to reimplement common code. Certain behaviors are common across calendar systems: The definition and behavior of week-related fields and time fields, the arithmetic (add
and roll
) behavior of many fields, and the field validation system.Calendar
base class contains some Gregorian calendar algorithmic support that subclasses can use (specifically in handleComputeFields(int)
). Subclasses can use the methods getGregorianXxx()
to obtain precomputed values. Motivation: This is required by all Calendar
subclasses in order to implement consistent time zone behavior, and Gregorian-derived systems can use the already computed data.FIELD_COUNT
constant has been removed. Use getFieldCount()
. In addition, framework API has been added to allow subclasses to define additional fields. Motivation: The number of fields is not constant across calendar systems.Date(Long.MIN_VALUE)
or Date(Long.MAX_VALUE)
. Instead, the Calendar
protected constants should be used. Motivation: With the addition of the JULIAN_DAY
field, Julian day numbers must be restricted to a 32-bit int
. This restricts the overall supported range. Furthermore, restricting the supported range simplifies the computations by removing special case code that was used to accomodate arithmetic overflow at millis near Long.MIN_VALUE
and Long.MAX_VALUE
.JULIAN_DAY
defines single-field specification of the date. MILLISECONDS_IN_DAY
defines a single-field specification of the wall time. DOW_LOCAL
and YEAR_WOY
implement localized day-of-week and week-of-year behavior.Calendar
.DateFormat
.子类API
原始的Calendar
API基于实现仅一个子类GregorianCalendar
。 结果,所有的子类化扭结都没有制定出来。 新的子类化API已经根据几个实现的子类进行了改进。 这包括必须重写的方法和子类调用的方法。 子类不再可以直接访问fields
和stamp
。 相反,他们有新的API来访问这些。 子类能够通过受保护的框架方法分配fields
数组; 这允许子类指定附加字段。
更多的功能已被移入基类。 基类现在包含许多用于支持公历的计算机器。 这是基于两件事情:(1)许多日历是基于公历(如佛教和日本的皇帝日历)。 (2) 所有日历都需要基本的格里高利支持才能处理时区计算。
常见的计算已被移入Calendar
。 子类不再计算周相关字段和时间相关字段。 这些通常由基类为所有日历处理。
子类计算时间=>字段
该ERA
, YEAR
, EXTENDED_YEAR
, MONTH
, DAY_OF_MONTH
,并DAY_OF_YEAR
字段由子类计算的基础上,儒略日。 所有其他字段由Calendar
计算。
handleComputeFields(int)
to compute the ERA
, YEAR
, EXTENDED_YEAR
, MONTH
, DAY_OF_MONTH
, and DAY_OF_YEAR
fields, based on the value of the JULIAN_DAY
field. If there are calendar-specific fields not defined by Calendar
, they must also be computed. These are the only fields that the subclass should compute. All other fields are computed by the base class, so time and week fields behave in a consistent way across all calendars. The default version of this method in Calendar
implements a proleptic Gregorian calendar. Within this method, subclasses may call getGregorianXxx()
to obtain the Gregorian calendar month, day of month, and extended year for the given date.子类计算字段=>时间
大多数字段值的解释完全由Calendar
处理。 Calendar
确定设置哪些字段,哪些不是,最近设置的字段等等。 另外, Calendar
处理来自时间字段的时间计算并处理与周有关的字段。 子类必须做的唯一事情就是根据年份字段确定延长的年份,然后,给定延长的年份和月份,它必须返回一个Julian天数。
handleGetExtendedYear()
to return the extended year for this calendar system, based on the YEAR
, EXTENDED_YEAR
, and any fields that the calendar system uses that are larger than a year, such as ERA
.handleComputeMonthStart(int, int, boolean)
to return the Julian day number associated with a month and extended year. This is the Julian day number of the day before the first day of the month. The month number is zero-based. This computation should not depend on any field values.其他方法
handleGetMonthLength(int, int)
to return the number of days in a given month of a given extended year. The month number, as always, is zero-based.handleGetYearLength(int)
to return the number of days in the given extended year. This method is used by computeWeekFields to compute the WEEK_OF_YEAR
and YEAR_WOY
fields.handleGetLimit(int, int)
to return the protected values of a field, depending on the value of limitType
. This method only needs to handle the fields ERA
, YEAR
, MONTH
, WEEK_OF_YEAR
, WEEK_OF_MONTH
, DAY_OF_MONTH
, DAY_OF_YEAR
, DAY_OF_WEEK_IN_MONTH
, YEAR_WOY
, and EXTENDED_YEAR
. Other fields are invariant (with respect to calendar system) and are handled by the base class.validateField(int)
to check any subclass-specific fields. If the field's value is out of range, the method should throw an IllegalArgumentException
. The method may call super.validateField(field)
to handle fields in a generic way, that is, to compare them to the range getMinimum(field)
..getMaximum(field)
.handleCreateFields()
to create an int[]
array large enough to hold the calendar's fields. This is only necessary if the calendar defines additional fields beyond those defined by Calendar
. The length of the result must be be between the base and maximum field counts.handleGetDateFormat(String, ULocale)
to create a DateFormat
appropriate to this calendar. This is only required if a calendar subclass redefines the use of a field (for example, changes the ERA
field from a symbolic field to a numeric one) or defines an additional field.roll
and add
to handle fields that are discontinuous. For example, in the Hebrew calendar the month "Adar I" only occurs in leap years; in other years the calendar jumps from Shevat (month #4) to Adar (month #6). The HebrewCalendar.add
and HebrewCalendar.roll
methods take this into account, so that adding 1 month to Shevat gives the proper result (Adar) in a non-leap year. The protected utility method pinField
is often useful when implementing these two methods. 规范化的行为
所有日历系统中的某些字段的行为已保持一致,并在 Calendar
实施。
Calendar
and to maintain basic correpsondences between calendar systems. Affected fields: AM_PM
, HOUR
, HOUR_OF_DAY
, MINUTE
, SECOND
, MILLISECOND
, ZONE_OFFSET
, and DST_OFFSET
.GregorianCalendar
fields: the YEAR
, MONTH
, and DAY_OF_MONTH
. As a result, Calendar
always computes these fields, even for non-Gregorian calendar systems. These fields are available to subclasses.DAY_OF_WEEK
, WEEK_OF_YEAR, WEEK_OF_MONTH
, DAY_OF_WEEK_IN_MONTH
, DOW_LOCAL
, YEAR_WOY
are all computed in a consistent way in the base class, based on the EXTENDED_YEAR
, DAY_OF_YEAR
, MONTH
, and DAY_OF_MONTH
, which are computed by the subclass.支持的范围
Calendar
的允许范围已缩小。 GregorianCalendar
用于尝试支持从Long.MIN_VALUE
到Long.MAX_VALUE
毫秒值的日期范围。 这引入了令人尴尬的构造(黑客),这会降低性能。 它还在边界引入了不一致的行为。 新的Calendar
协议规定可支持日期的最大范围为Julian日数为-0x7F000000
至+0x7F000000
。 这相当于从公元前5,800,000到公元5,800,000的年数。 程序员应该使用Calendar
的受保护的常量来指定非常早或非常晚的日期。
一般注意事项
GregorianCalendar
class supports dates before the historical onset of the calendar by extending the calendar system backward in time. Similarly, the HebrewCalendar
extends backward before the start of its epoch into zero and negative years. Subclasses do not throw exceptions because a date precedes the historical start of a calendar system. Instead, they implement handleGetLimit(int, int)
to return appropriate limits on YEAR
, ERA
, etc. fields. Then, if the calendar is set to not be lenient, out-of-range field values will trigger an exception.YEAR
field in that it ranges over all integer values, including zero and negative values, and it encapsulates the information of the YEAR
field and all larger fields. Thus, for the Gregorian calendar, the EXTENDED_YEAR
is computed as ERA==AD ? YEAR : 1-YEAR
. Another example is the Mayan long count, which has years (KUN
) and nested cycles of years (KATUN
and BAKTUN
). The Mayan EXTENDED_YEAR
is computed as TUN + 20 * (KATUN + 20 * BAKTUN)
. The Calendar
base class uses the EXTENDED_YEAR
field to compute the week-related fields.也可以看看:
Nested classes |
|
---|---|
class |
Calendar.WeekData 用于访问CLDR周末数据的简单,不可变的类结构类。 |
Constants |
|
---|---|
int |
AM
|
int |
AM_PM
|
int |
APRIL 指示一年中的第四个月的 |
int |
AUGUST 指示一年中的第八个月的 |
int |
BASE_FIELD_COUNT 此类定义的字段数。 |
int |
DATE
|
int |
DAY_OF_MONTH
|
int |
DAY_OF_WEEK 表示星期几的 |
int |
DAY_OF_WEEK_IN_MONTH
|
int |
DAY_OF_YEAR
|
int |
DECEMBER
|
int |
DOW_LOCAL [icu] |
int |
DST_OFFSET
|
int |
EPOCH_JULIAN_DAY 这个时代的Julian日,即1970年1月1日的公历日。 |
int |
ERA
|
int |
EXTENDED_YEAR [icu] |
int |
FEBRUARY 指示一年中第二个月的 |
int |
FRIDAY 指示周五的 |
int |
GREATEST_MINIMUM 限制类型为 |
int |
HOUR
|
int |
HOUR_OF_DAY
|
int |
INTERNALLY_SET 时间戳 |
int |
IS_LEAP_MONTH [icu]指示当前月份是否为闰月的字段。 |
int |
JANUARY 指示一年中第一个月的 |
int |
JAN_1_1_JULIAN_DAY 格里历时代的Julian日,即公历1月1日1日。 |
int |
JULIAN_DAY [icu] |
int |
JULY 指示一年中第七个月的 |
int |
JUNE 指示一年中的第六个月的 |
int |
LEAST_MAXIMUM 限制类型为 |
int |
MARCH 指示一年中第三个月的 |
int |
MAXIMUM 限制类型为 |
int |
MAX_FIELD_COUNT 可能的最大数量的字段。 |
int |
MAX_JULIAN 最大支持的朱利安日。 |
long |
MAX_MILLIS 支持的最大纪元毫秒数。 |
int |
MAY 指示一年中第五个月的 |
int |
MILLISECOND
|
int |
MILLISECONDS_IN_DAY [icu] |
int |
MINIMUM 限制类型为 |
int |
MINIMUM_USER_STAMP 如果时间戳 |
int |
MINUTE
|
int |
MIN_JULIAN 最低支持的Julian日。 |
long |
MIN_MILLIS 支持的最小时间毫秒数。 |
int |
MONDAY 指示星期一的 |
int |
MONTH 表示月份的字段号为 |
int |
NOVEMBER 指示一年中的第十一个月的 |
int |
OCTOBER 指示一年中第10个月的 |
long |
ONE_DAY 一天中的毫秒数。 |
int |
ONE_HOUR 一小时内的毫秒数。 |
int |
ONE_MINUTE 一分钟内的毫秒数。 |
int |
ONE_SECOND 一秒钟内的毫秒数。 |
long |
ONE_WEEK 一周内的毫秒数。 |
int |
PM
|
int |
RESOLVE_REMAP 对重新映射的解析表字段值进行或运算的值。 |
int |
SATURDAY 指示星期六的 |
int |
SECOND
|
int |
SEPTEMBER 指示一年中第九个月的 |
int |
SUNDAY 指示周日的 |
int |
THURSDAY 指示星期四的 |
int |
TUESDAY 指示周二的 |
int |
UNDECIMBER
|
int |
UNSET 时间戳 |
int |
WALLTIME_FIRST [icu]由 |
int |
WALLTIME_LAST [icu]由 |
int |
WALLTIME_NEXT_VALID [icu]由 |
int |
WEDNESDAY 指示周三的 |
int |
WEEK_OF_MONTH
|
int |
WEEK_OF_YEAR
|
int |
YEAR 表示年份的字段号为 |
int |
YEAR_WOY [icu] |
int |
ZONE_OFFSET
|
Fields |
|
---|---|
protected static final Date |
MAX_DATE 最大支持 |
protected static final Date |
MIN_DATE 最低支持 |
Protected constructors |
|
---|---|
Calendar() 使用默认时区和默认的 |
|
Calendar(TimeZone zone, Locale aLocale) 使用指定的时区和区域设置构建日历。 |
|
Calendar(TimeZone zone, ULocale locale) 使用指定的时区和区域设置构建日历。 |
Public methods |
|
---|---|
void |
add(int field, int amount) 使用此日历规则将已签名的金额添加到指定的字段。 |
boolean |
after(Object when) 比较时间字段记录。 |
boolean |
before(Object when) 比较时间字段记录。 |
final void |
clear() 清除所有时间字段的值。 |
final void |
clear(int field) 清除给定时间字段中的值。 |
Object |
clone() 覆盖可复制 |
int |
compareTo(Calendar that) 比较两个 |
boolean |
equals(Object obj) 将此日历与指定的对象进行比较。 |
int |
fieldDifference(Date when, int field) [icu]返回给定时间与此日历对象设置为的时间之间的差异。 |
final int |
get(int field) 返回给定时间字段的值。 |
int |
getActualMaximum(int field) 给定当前日期,返回此字段可能具有的最大值。 |
int |
getActualMinimum(int field) 给定当前日期,返回此字段可能具有的最小值。 |
static Locale[] |
getAvailableLocales() 返回安装日历的语言环境列表。 |
DateFormat |
getDateTimeFormat(int dateStyle, int timeStyle, ULocale loc) [icu]返回适合此日历的 |
DateFormat |
getDateTimeFormat(int dateStyle, int timeStyle, Locale loc) [icu]返回适合此日历的 |
String |
getDisplayName(ULocale loc) 以给定语言环境的语言返回此日历的名称。 |
String |
getDisplayName(Locale loc) 以给定语言环境的语言返回此日历的名称。 |
final int |
getFieldCount() [icu]返回此日历定义的字段数。 |
int |
getFirstDayOfWeek() |
final int |
getGreatestMinimum(int field) 如果变化,则返回给定字段的最大最小值。 |
static Calendar |
getInstance() 使用默认时区和区域设置返回日历。 |
static Calendar |
getInstance(Locale aLocale) 使用默认时区和指定区域设置返回日历。 |
static Calendar |
getInstance(TimeZone zone, Locale aLocale) 返回具有指定时区和区域设置的日历。 |
static Calendar |
getInstance(TimeZone zone, ULocale locale) 返回具有指定时区和区域设置的日历。 |
static Calendar |
getInstance(TimeZone zone) 使用指定的时区和默认语言环境返回日历。 |
static Calendar |
getInstance(ULocale locale) 使用默认时区和指定区域设置返回日历。 |
static final String[] |
getKeywordValuesForLocale(String key, ULocale locale, boolean commonlyUsed) [icu]给定一个键和一个语言环境,以一个首选顺序返回一个字符串值数组,它会产生变化。 |
final int |
getLeastMaximum(int field) 如果变化,则返回给定字段的最小最大值。 |
final int |
getMaximum(int field) 返回给定时间字段的最大值。 |
int |
getMinimalDaysInFirstWeek() 返回一年中第一周所需的最短日期。 |
final int |
getMinimum(int field) 返回给定时间字段的最小值。 |
int |
getRepeatedWallTimeOption() [icu]获取在负时区偏移转换时重复多次重复墙壁时间的行为。 |
int |
getSkippedWallTimeOption() [icu]获取在正时区偏移转换处理跳过的墙壁时间的行为。 |
final Date |
getTime() 返回此日历的当前时间。 |
long |
getTimeInMillis() 长时间返回此日历的当前时间。 |
TimeZone |
getTimeZone() 返回时区。 |
String |
getType() [icu]返回此Calendar对象的日历类型名称字符串。 |
Calendar.WeekData |
getWeekData() [icu]返回简单的,不可变的类结构类来访问此日历中的周末数据。 |
static Calendar.WeekData |
getWeekDataForRegion(String region) [icu]返回简单的,不可变的类结构类来访问CLDR周末数据。 |
int |
hashCode() 返回此日历的哈希码。 |
boolean |
isEquivalentTo(Calendar other) [icu]如果给定的Calendar对象与此对象相等,则返回true。 |
boolean |
isLenient() 告诉日期/时间解释是否宽松。 |
final boolean |
isSet(int field) 确定给定时间字段是否设置了值。 |
boolean |
isWeekend(Date date) [icu]如果给定日期和时间在该日历系统的周末,则返回true。 |
boolean |
isWeekend() [icu]如果此日历的当前日期和时间在该日历系统的周末,则返回true。 |
final void |
roll(int field, boolean up) 在给定字段上滚动(上/下)单个时间单位。 |
void |
roll(int field, int amount) 在给定字段上滚动(向上/向下)指定的时间量。 |
final void |
set(int year, int month, int date, int hour, int minute, int second) 设置字段年,月,日,时,分和秒的值。 |
final void |
set(int year, int month, int date, int hour, int minute) 设置字段年,月,日,小时和分钟的值。 |
final void |
set(int field, int value) 使用给定值设置时间字段。 |
final void |
set(int year, int month, int date) 设置字段年,月和日期的值。 |
void |
setFirstDayOfWeek(int value) |
void |
setLenient(boolean lenient) 指定日期/时间解释是否宽松。 |
void |
setMinimalDaysInFirstWeek(int value) 设置一年中第一周所需的最短日期。 |
void |
setRepeatedWallTimeOption(int option) [icu]设置在负时区偏移转换时重复多次处理墙壁时间的行为。 |
void |
setSkippedWallTimeOption(int option) [icu]设置在正时区偏移转换时处理跳过墙壁时间的行为。 |
final void |
setTime(Date date) 将此日历的当前时间设置为给定的日期。 |
void |
setTimeInMillis(long millis) 根据给定的长值设置此日历的当前时间。 |
void |
setTimeZone(TimeZone value) 使用给定的时区值设置时区。 |
Calendar |
setWeekData(Calendar.WeekData wdata) [icu]根据WeekData输入设置此日历中的数据。 |
String |
toString() 返回此日历的字符串表示形式。 |
Protected methods |
|
---|---|
void |
complete() 填写时间字段列表中未设置的字段。 |
void |
computeFields() 当前毫秒时间值转换为 |
final void |
computeGregorianFields(int julianDay) 从Julian日计算公历的年,月和日。 |
int |
computeGregorianMonthStart(int year, int month) 计算公历一个月的儒略日。 |
int |
computeJulianDay() 计算此日历字段指定的Julian日数。 |
int |
computeMillisInDay() 从字段计算当天的毫秒数。 |
void |
computeTime() 将 |
int |
computeZoneOffset(long millis, int millisInDay) 此方法可以假定已设置EXTENDED_YEAR。 |
String |
fieldName(int field) 返回字段的字符串名称,用于调试和异常。 |
static final int |
floorDivide(int numerator, int denominator, int[] remainder) 除两个整数,返回商的层数,和模数余数。 |
static final int |
floorDivide(int numerator, int denominator) 除以两个整数,返回商的底线。 |
static final long |
floorDivide(long numerator, long denominator) 分两个长整数,返回商的底线。 |
static final int |
floorDivide(long numerator, int denominator, int[] remainder) 除两个整数,返回商的层数,和模数余数。 |
int[][][] |
getFieldResolutionTable() 返回此日历的字段分辨率数组。 |
final int |
getGregorianDayOfMonth() 根据 |
final int |
getGregorianDayOfYear() 根据 |
final int |
getGregorianMonth() 按照 |
final int |
getGregorianYear() 按照 |
int |
getLimit(int field, int limitType) 返回一个字段的限制。 |
final int |
getStamp(int field) 返回一个字段的时间戳。 |
static final int |
gregorianMonthLength(int y, int m) 返回公历的一个月的长度。 |
static final int |
gregorianPreviousMonthLength(int y, int m) 返回公历日历前一个月的长度。 |
void |
handleComputeFields(int julianDay) 子类可以重写此方法来计算特定于每个日历系统的几个字段。 |
int |
handleComputeJulianDay(int bestField) 子类可以覆盖这个。 |
abstract int |
handleComputeMonthStart(int eyear, int month, boolean useMonth) 返回给定扩展年份中给定月份的第一天之前的Julian日数。 |
int[] |
handleCreateFields() 使用超出 |
DateFormat |
handleGetDateFormat(String pattern, String override, Locale locale) 创建适合此日历的 |
DateFormat |
handleGetDateFormat(String pattern, ULocale locale) 创建适合此日历的 |
DateFormat |
handleGetDateFormat(String pattern, Locale locale) 创建适合此日历的 |
abstract int |
handleGetExtendedYear() 返回当前字段定义的扩展年份。 |
abstract int |
handleGetLimit(int field, int limitType) 用于定义不同类型限制的子类API。 |
int |
handleGetMonthLength(int extendedYear, int month) 返回此日历系统给定扩展年的给定月份中的天数。 |
int |
handleGetYearLength(int eyear) 返回此日历系统的给定扩展年份中的天数。 |
final int |
internalGet(int field) 返回给定时间字段的值。 |
final int |
internalGet(int field, int defaultValue) 返回给定时间字段的值,如果未设置字段,则返回给定的默认值。 |
final long |
internalGetTimeInMillis() 返回当前毫秒数而不重新计算。 |
final void |
internalSet(int field, int value) 将一个字段设置为一个值。 |
static final boolean |
isGregorianLeapYear(int year) 确定给定年份是否为闰年。 |
static final int |
julianDayToDayOfWeek(int julian) 给定Julian日,返回从星期日到星期六的星期几。 |
static final long |
julianDayToMillis(int julian) 每天将Julian转换为毫秒。 |
static final int |
millisToJulianDay(long millis) 将时间转换为毫秒到Julian日。 |
int |
newerField(int defaultField, int alternateField) 返回更新的字段,即defaultField或alternateField。 |
int |
newestStamp(int first, int last, int bestStampSoFar) 返回给定范围的字段的最新邮票。 |
void |
pinField(int field) 调整指定的字段,使其在日历设置日期的允许范围内。 |
void |
prepareGetActual(int field, boolean isMinimum) 准备这个日历来计算实际的最小值或最大值。 |
int |
resolveFields(int[][][] precedenceTable) 给定一个优先表,返回表中最新的字段组合,如果没有找到,则返回-1。 |
void |
validateField(int field) 验证此日历的单个字段。 |
final void |
validateField(int field, int min, int max) 给定其最小和最大允许值,验证此日历的单个字段。 |
void |
validateFields() 通过在已设置的每个字段上调用 |
int |
weekNumber(int desiredDay, int dayOfPeriod, int dayOfWeek) 返回一段时间内一天中的星期数。 |
final int |
weekNumber(int dayOfPeriod, int dayOfWeek) 返回一段时间内一天中的星期数。 |
Inherited methods |
|
---|---|
From class java.lang.Object
|
|
From interface java.lang.Comparable
|
int AM_PM
get
和set
字段编号,指示HOUR
是在中午之前还是之后。 例如,在10:04:15.250 PM, AM_PM
是PM
。
常量值:9(0x00000009)
int BASE_FIELD_COUNT
此类定义的字段数。 子类可以定义以这个数字开始的附加字段。
常量值:23(0x00000017)
int DATE
get
和set
字段编号,指示月份的日期。 这是DAY_OF_MONTH
的同义词。 本月的第一天有值1。
也可以看看:
常量值:5(0x00000005)
int DAY_OF_MONTH
get
和set
字段编号指示月份的日期。 这是DATE
的同义词。 本月的第一天有值1。
也可以看看:
常量值:5(0x00000005)
int DAY_OF_WEEK
表示星期几的get
和set
字段编号。 此字段值SUNDAY
, MONDAY
, TUESDAY
, WEDNESDAY
, THURSDAY
, FRIDAY
,并SATURDAY
。
常量值:7(0x00000007)
int DAY_OF_WEEK_IN_MONTH
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
到15
对应于DAY_OF_WEEK_IN_MONTH 2
,依此类推。 DAY_OF_WEEK_IN_MONTH 0
表示DAY_OF_WEEK_IN_MONTH 1
之前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
结束。
也可以看看:
常量值:8(0x00000008)
int DAY_OF_YEAR
get
和set
字段编号,指示当年的日期编号。 今年的第一天有价值1。
常数值:6(0x00000006)
int DOW_LOCAL
[icu] get()
和set()
字段编号,指示当地的当天。 这将是从1到7的一个值,其中1是本地化的第一天。
常量值:18(0x00000012)
int EPOCH_JULIAN_DAY
这个时代的Julian日,即1970年1月1日的公历日。
常量值:2440588(0x00253d8c)
int ERA
用于指示时代的get
和set
字段号,例如Julian日历中的AD或BC。 这是一个日历特定的值; 请参阅子类文档。
常量值:0(0x00000000)
int EXTENDED_YEAR
[icu] get()
和set()
字段数字表示延长的年份。 这是一个指定该日历系统年份的单一数字,涵盖所有超过一年的字段。 例如,对于朱利安日历系统,年份数字是积极的,具有BCE或CE的时代。 Julian日历系统的扩展年价值为CE年分配正值,BCE年为负值,1 BCE为0年。
常量值:19(0x00000013)
int GREATEST_MINIMUM
限制类型为 getLimit()
和 handleGetLimit()
指示字段可以采用的最大最小值。
常数值:1(0x00000001)
int HOUR
表示上午或下午的小时的get
和set
字段编号。 HOUR
用于12小时制。 例如,在10:04:15.250 PM HOUR
是10。
也可以看看:
常量值:10(0x0000000a)
int HOUR_OF_DAY
指示一天中的小时的get
和set
字段编号。 HOUR_OF_DAY
用于24小时制。 例如,在10:04:15.250 PM, HOUR_OF_DAY
是22。
也可以看看:
常量值:11(0x0000000b)
int INTERNALLY_SET
时间戳 stamp[]
值指示已经通过时间或其他字段的计算设置了字段。
也可以看看:
常数值:1(0x00000001)
int IS_LEAP_MONTH
[icu]指示当前月份是否为闰月的字段。 非闰月的值应为0,闰月的值应为1。
常量值:22(0x00000016)
int JAN_1_1_JULIAN_DAY
格里历时代的Julian日,即公历1月1日1日。
常量值:1721426(0x001a4452)
int JULIAN_DAY
[icu] get()
和set()
字段编号,指示修改的儒略日数。 这与两个方面的传统儒略日数不同。 首先,它在午夜的当地区域划分日期,而不是格林尼治标准时间的中午。 其次,它是一个本地号码; 也就是说,这取决于当地的时区。 它可以被认为是包含所有日期相关字段的单个数字。
常量值:20(0x00000014)
int LEAST_MAXIMUM
限制类型为 getLimit()
和 handleGetLimit()
指示字段可以采用的最小值。
常量值:2(0x00000002)
int MAXIMUM
限制类型为 getLimit()
和 handleGetLimit()
指示字段可以采用的最大值(最大值)。
常量值:3(0x00000003)
int MAX_FIELD_COUNT
可能的最大数量的字段。 子类不能定义比此数字更多的总字段。
常量值:32(0x00000020)
int MAX_JULIAN
最大支持的朱利安日。 该值相当于MAX_MILLIS
和MAX_DATE
。
也可以看看:
常量值:2130706432(0x7f000000)
long MAX_MILLIS
支持的最大纪元毫秒数。 该值相当于MAX_JULIAN
和MAX_DATE
。
常量值:183882168921600000(0x028d47dbbf19b000)
int MILLISECOND
get
和set
字段编号表示秒内的毫秒数。 例如,在10:04:15.250 PM, MILLISECOND
是250。
常量值:14(0x0000000e)
int MILLISECONDS_IN_DAY
[icu] get()
和set()
字段编号,指示当天的毫秒数。 范围从0到23:59:59.999(不考虑DST)。 该字段的行为完全类似于所有时间相关字段的组合,不包括区域字段。 因此,它也反映了DST过渡日的这些领域的不连续性。 在夏令时开始的一天,它会跳跃前进。 在DST停止的一天,它会后退。 这反映了必须与DST_OFFSET字段组合以获得唯一的本地时间值的事实。
常量值:21(0x00000015)
int MINIMUM
限制类型为 getLimit()
和 handleGetLimit()
指示字段可以采用的最小值(最小值)。
常量值:0(0x00000000)
int MINIMUM_USER_STAMP
如果时间戳 stamp[]
的值大于或等于 MINIMUM_USER_SET
那么它已由用户通过调用 set()
来 set()
。
也可以看看:
常量值:2(0x00000002)
int MINUTE
get
和set
字段编号表示一小时内的分钟数。 例如,在10:04:15.250 PM, MINUTE
是4。
常量值:12(0x0000000c)
int MIN_JULIAN
最低支持的Julian日。 该值相当于MIN_MILLIS
和MIN_DATE
。
也可以看看:
常量值:-2130706432(0x81000000)
long MIN_MILLIS
支持的最小时间毫秒数。 该值相当于MIN_JULIAN
和MIN_DATE
。
常量值:-184303902528000000(0xfd713893bf19b000)
int MONTH
指示月份的get
和set
字段编号。 这是一个日历特定的值。 一年的第一个月是JANUARY
; 最后一个取决于一年中的月数。
也可以看看:
常量值:2(0x00000002)
long ONE_DAY
一天中的毫秒数。 尽管ONE_DAY和ONE_WEEK可以装入整数,但为了防止执行时的算术溢出(错误4173516),它们必须很长。
常量值:86400000(0x0000000005265c00)
long ONE_WEEK
一周内的毫秒数。 尽管ONE_DAY和ONE_WEEK可以装入整数,但为了防止执行时的算术溢出(错误4173516),它们必须很长。
常量值:604800000(0x00000000240c8400)
int RESOLVE_REMAP
对重新映射的解析表字段值进行或运算的值。
也可以看看:
常量值:32(0x00000020)
int SECOND
get
和set
字段编号指示分钟内的第二个字段。 例如,在10:04:15.250 PM SECOND
是15。
常量值:13(0x0000000d)
int UNDECIMBER
MONTH
字段的值表示一年中的第13个月。 虽然GregorianCalendar
不使用此值,但月历可以。
常量值:12(0x0000000c)
int UNSET
时间戳 stamp[]
值指示自从上次调用 clear()
以来没有设置字段。
也可以看看:
常量值:0(0x00000000)
int WALLTIME_FIRST
[icu]由 setRepeatedWallTimeOption(int)
和 setSkippedWallTimeOption(int)
使用的 setRepeatedWallTimeOption(int)
,指定不明确的墙壁时间被解释为最早的。
也可以看看:
常数值:1(0x00000001)
int WALLTIME_LAST
[icu]由 setRepeatedWallTimeOption(int)
和 setSkippedWallTimeOption(int)
使用的 setRepeatedWallTimeOption(int)
,指定了模糊的墙壁时间以解释为最新的。
也可以看看:
常量值:0(0x00000000)
int WALLTIME_NEXT_VALID
[icu] setSkippedWallTimeOption(int)
使用的选项,指定不明确的墙壁时间以解释为下一个有效的墙壁时间。
常量值:2(0x00000002)
int WEEK_OF_MONTH
get
和set
字段编号,指示当前月份内的星期编号。 如getFirstDayOfWeek()
和getMinimalDaysInFirstWeek()
所定义的月份的第一个星期的值为1,子类在该月的第一周之前的天数定义了WEEK_OF_MONTH
的值。
常量值:4(0x00000004)
int WEEK_OF_YEAR
get
和set
字段编号,指示当前年份内的星期编号。 由getFirstDayOfWeek()
和getMinimalDaysInFirstWeek()
定义的年度第一周的值为1.子类在一年的第一周之前定义了天数为WEEK_OF_YEAR
的天数。
常量值:3(0x00000003)
int YEAR_WOY
[icu] get()
和set()
字段编号,指示对应于WEEK_OF_YEAR
字段的扩展年份。 这可能大于或小于EXTENDED_YEAR
的值。
常量值:17(0x00000011)
int ZONE_OFFSET
get
和 set
字段编号,指示以毫秒为单位的GMT的原始偏移量。
常量值:15(0x0000000f)
Calendar (TimeZone zone, Locale aLocale)
使用指定的时区和区域设置构建日历。
Parameters | |
---|---|
zone |
TimeZone : the time zone to use |
aLocale |
Locale : the locale for the week data |
Calendar (TimeZone zone, ULocale locale)
使用指定的时区和区域设置构建日历。
Parameters | |
---|---|
zone |
TimeZone : the time zone to use |
locale |
ULocale : the ulocale for the week data |
void add (int field, int amount)
使用此日历规则将已签名的金额添加到指定的字段。 例如,要在当前日期添加三天,您可以致电add(Calendar.DATE, 3)
。
添加到某些字段时,其他字段的值可能会发生冲突并需要更改。 例如,将1加到当MONTH
为公历日期96年1月31日领域, DAY_OF_MONTH
字段必须被调整,使得结果为96年2月29日,而不是无效的96年2月31日。
增加一个正值总是意味着及时向前移动,因此对于公历100年,从公元前100年开始,并在公元前99年为年份结果加上+1(即使这实际上减少了该字段本身的数值)。
[ICU]注意:此方法的ICU实现能够添加到所有领域,除了ERA
, DST_OFFSET
,并ZONE_OFFSET
。 当然,子类可以增加对add
的替代字段中的其他字段的支持。
注意:您应始终使用roll和add,而不是尝试直接在Calendar的字段上执行算术运算。 Calendar子类非常有可能具有非线性行为的字段,例如在非闰年期间丢失了几个月或几天。 子类“ add和roll方法将考虑到这一点,而简单的算术操作可能会导致无效结果。
子类:
add
这种实现假定该字段的行为在其最小值和最大值之间是连续的,这通过调用getActualMinimum
和getActualMaximum
。 对于这样的字段,简单的算术运算就足以执行添加。
具有这种连续性假设破坏的字段的子类必须add
才能专门处理这些字段。 例如,在希伯来日历中,“阿达尔一世”月份只发生在闰年; 在其他几年中,日历从Shevat(第4个月)跳到Adar(第6个月)。 HebrewCalendar.add
方法考虑到了这一点,因此在Shevat中添加一个月的日期会在非闰年给出正确的结果(Adar)。
Parameters | |
---|---|
field |
int : the time field. |
amount |
int : the amount to add to the field. |
Throws | |
---|---|
IllegalArgumentException |
if the field is invalid or refers to a field that cannot be handled by this method. |
也可以看看:
boolean after (Object when)
比较时间字段记录。 等同于将转换结果与UTC进行比较。
Parameters | |
---|---|
when |
Object : the Calendar to be compared with this Calendar. |
Returns | |
---|---|
boolean |
true if the current time of this Calendar is after the time of Calendar when; false otherwise. |
boolean before (Object when)
比较时间字段记录。 等同于将转换结果与UTC进行比较。
Parameters | |
---|---|
when |
Object : the Calendar to be compared with this Calendar. |
Returns | |
---|---|
boolean |
true if the current time of this Calendar is before the time of Calendar when; false otherwise. |
void clear (int field)
清除给定时间字段中的值。
Parameters | |
---|---|
field |
int : the time field to be cleared. |
int compareTo (Calendar that)
比较两个 Calendar
对象所代表的时间(单位为 Calendar
。
Parameters | |
---|---|
that |
Calendar : the Calendar to compare to this. |
Returns | |
---|---|
int |
0 if the time represented by this Calendar is equal to the time represented by that Calendar , a value less than 0 if the time represented by this is before the time represented by that, and a value greater than 0 if the time represented by this is after the time represented by that. |
Throws | |
---|---|
NullPointerException |
if that Calendar is null. |
IllegalArgumentException |
if the time of that Calendar can't be obtained because of invalid calendar values. |
boolean equals (Object obj)
将此日历与指定的对象进行比较。 当且仅当参数不是null
并且是代表与此对象相同日历的Calendar
对象时,结果为true
。
Parameters | |
---|---|
obj |
Object : the object to compare with. |
Returns | |
---|---|
boolean |
true if the objects are the same; false otherwise. |
int fieldDifference (Date when, int field)
[icu]返回给定时间与此日历对象设置为的时间之间的差异。 如果此日历在给定时间之前设置,返回的值将为正值。 如果此日历在给定时间后设置,则返回的值将为负值。 field
参数指定返回值的单位。 例如,如果fieldDifference(when, Calendar.MONTH)
返回3,则此日历设置为when
之前3个月,并且可能还有一些额外时间少于一个月。
作为此次调用的副作用,此日历按给定数量前进至when
。 也就是说,调用此方法具有调用add(field, n)
,其中n
是返回值。
用法:要使用此方法,请首先以最大的感兴趣区域调用它,然后逐渐减小字段。 例如:
int y = cal.fieldDifference(when, Calendar.YEAR); int m = cal.fieldDifference(when, Calendar.MONTH); int d = cal.fieldDifference(when, Calendar.DATE);computes the difference between
cal
and
when
in years, months, and days.
注意: fieldDifference()
是不对称的 。 也就是说,在以下代码中:
cal.setTime(date1); int m1 = cal.fieldDifference(date2, Calendar.MONTH); int d1 = cal.fieldDifference(date2, Calendar.DATE); cal.setTime(date2); int m2 = cal.fieldDifference(date1, Calendar.MONTH); int d2 = cal.fieldDifference(date1, Calendar.DATE);one might expect that
m1 == -m2 && d1 == -d2
. However, this is not generally the case, because of irregularities in the underlying calendar system (e.g., the Gregorian calendar has a varying number of days per month).
Parameters | |
---|---|
when |
Date : the date to compare this calendar's time to |
field |
int : the field in which to compute the result |
Returns | |
---|---|
int |
the difference, either positive or negative, between this calendar's time and when , in terms of field . |
int get (int field)
返回给定时间字段的值。
Parameters | |
---|---|
field |
int : the given time field. |
Returns | |
---|---|
int |
the value for the given time field. |
int getActualMaximum (int field)
给定当前日期,返回此字段可能具有的最大值。 例如,在公历1997年2月3日和DAY_OF_MONTH
字段中,实际最大值为28; 1996年2月3日是29。
实际的最大计算忽略较小的字段和类似字段的当前值。 例如,DAY_OF_YEAR或MONTH的实际最大值仅取决于年份和上一年的字段。 此外,DAY_OF_MONTH的实际最大值还取决于MONTH字段和该粒度的任何其他字段(如IS_LEAP_MONTH)。 DAY_OF_WEEK_IN_MONTH字段不依赖于当前的DAY_OF_WEEK; 它会返回当前月份中任何一天的最大值。 对于WEEK_OF_MONTH和WEEK_OF_YEAR字段也是如此。
Parameters | |
---|---|
field |
int : the field whose maximum is desired |
Returns | |
---|---|
int |
the maximum of the given field for the current date of this calendar |
int getActualMinimum (int field)
给定当前日期,返回此字段可能具有的最小值。 对于大多数领域,这与getMinimum
和getGreatestMinimum
相同。 但是,一些领域,特别是与周数相关的领域更加复杂。
例如,假设getMinimalDaysInFirstWeek
返回getFirstDayOfWeek
返回SUNDAY。 如果该月的第一天是星期日,星期一,星期二或星期三,则第一周将有四天或更多天,因此它将是第一周,并且getActualMinimum(WEEK_OF_MONTH)
将返回1.但是,如果该月的第一天是星期四,星期五或星期六,那周没有四天,所以它是第0周, getActualMinimum(WEEK_OF_MONTH)
将返回0。
Parameters | |
---|---|
field |
int : the field whose actual minimum value is desired. |
Returns | |
---|---|
int |
the minimum of the given field for the current date of this calendar |
Locale[] getAvailableLocales ()
返回安装日历的语言环境列表。
Returns | |
---|---|
Locale[] |
the list of locales for which Calendars are installed. |
DateFormat getDateTimeFormat (int dateStyle, int timeStyle, ULocale loc)
[icu]返回适合此日历的DateFormat
。 希望专门化此行为的子类应覆盖handleGetDateFormat(String, ULocale)
。
Parameters | |
---|---|
dateStyle |
int
|
timeStyle |
int
|
loc |
ULocale
|
Returns | |
---|---|
DateFormat |
DateFormat getDateTimeFormat (int dateStyle, int timeStyle, Locale loc)
[icu]返回适合此日历的DateFormat
。 希望专门化此行为的子类应覆盖handleGetDateFormat(String, ULocale)
。
Parameters | |
---|---|
dateStyle |
int
|
timeStyle |
int
|
loc |
Locale
|
Returns | |
---|---|
DateFormat |
String getDisplayName (ULocale loc)
以给定语言环境的语言返回此日历的名称。
Parameters | |
---|---|
loc |
ULocale
|
Returns | |
---|---|
String |
String getDisplayName (Locale loc)
以给定语言环境的语言返回此日历的名称。
Parameters | |
---|---|
loc |
Locale
|
Returns | |
---|---|
String |
int getFieldCount ()
[icu]返回此日历定义的字段数。 set()
和get()
有效字段参数是0..getFieldCount()-1
。
Returns | |
---|---|
int |
int getFirstDayOfWeek ()
返回一周中的第一天,其中1 = SUNDAY
和7 = SATURDAY
。 如周日在美国,周一在法国
Returns | |
---|---|
int |
the first day of the week, where 1 = SUNDAY and 7 = SATURDAY . |
int getGreatestMinimum (int field)
如果变化,则返回给定字段的最大最小值。 否则与getMinimum()相同。 对于格里高利来说,没有区别。
Parameters | |
---|---|
field |
int : the given time field. |
Returns | |
---|---|
int |
the highest minimum value for the given time field. |
Calendar getInstance ()
使用默认时区和区域设置返回日历。
Returns | |
---|---|
Calendar |
a Calendar. |
Calendar getInstance (Locale aLocale)
使用默认时区和指定区域设置返回日历。
Parameters | |
---|---|
aLocale |
Locale : the locale for the week data |
Returns | |
---|---|
Calendar |
a Calendar. |
Calendar getInstance (TimeZone zone, Locale aLocale)
返回具有指定时区和区域设置的日历。
Parameters | |
---|---|
zone |
TimeZone : the time zone to use |
aLocale |
Locale : the locale for the week data |
Returns | |
---|---|
Calendar |
a Calendar. |
Calendar getInstance (TimeZone zone, ULocale locale)
返回具有指定时区和区域设置的日历。
Parameters | |
---|---|
zone |
TimeZone : the time zone to use |
locale |
ULocale : the ulocale for the week data |
Returns | |
---|---|
Calendar |
a Calendar. |
Calendar getInstance (TimeZone zone)
使用指定的时区和默认语言环境返回日历。
Parameters | |
---|---|
zone |
TimeZone : the time zone to use |
Returns | |
---|---|
Calendar |
a Calendar. |
Calendar getInstance (ULocale locale)
使用默认时区和指定区域设置返回日历。
Parameters | |
---|---|
locale |
ULocale : the ulocale for the week data |
Returns | |
---|---|
Calendar |
a Calendar. |
String[] getKeywordValuesForLocale (String key, ULocale locale, boolean commonlyUsed)
[icu]给定一个键和一个语言环境,以一个首选顺序返回一个字符串值数组,它会产生变化。 这些都是且仅有那些值,其中由输入语言环境加上输入关键字和该值形成的语言环境的服务的打开(创建)具有与仅使用输入语言环境创建的行为不同的行为。
Parameters | |
---|---|
key |
String : one of the keys supported by this service. For now, only "calendar" is supported. |
locale |
ULocale : the locale |
commonlyUsed |
boolean : if set to true it will return only commonly used values with the given locale in preferred order. Otherwise, it will return all the available values for the locale. |
Returns | |
---|---|
String[] |
an array of string values for the given key and the locale. |
int getLeastMaximum (int field)
如果变化,则返回给定字段的最小最大值。 否则与getMaximum()相同。 例如,对于Gregorian DAY_OF_MONTH,28。
Parameters | |
---|---|
field |
int : the given time field. |
Returns | |
---|---|
int |
the lowest maximum value for the given time field. |
int getMaximum (int field)
返回给定时间字段的最大值。 例如格里高利DAY_OF_MONTH,31。
Parameters | |
---|---|
field |
int : the given time field. |
Returns | |
---|---|
int |
the maximum value for the given time field. |
int getMinimalDaysInFirstWeek ()
返回一年中第一周所需的最短日期。 也就是说,如果第一周定义为包含一年中第一个月的第一天的那一周,则getMinimalDaysInFirstWeek返回1.如果所需的最短天数必须为整周,getMinimalDaysInFirstWeek返回7。
Returns | |
---|---|
int |
the minimal days required in the first week of the year. |
int getMinimum (int field)
返回给定时间字段的最小值。 例如,对于公历DAY_OF_MONTH,1。
Parameters | |
---|---|
field |
int : the given time field. |
Returns | |
---|---|
int |
the minimum value for the given time field. |
int getRepeatedWallTimeOption ()
[icu]获取在负时区偏移转换时重复多次重复墙壁时间的行为。
Returns | |
---|---|
int |
the behavior for handling repeating wall time, either WALLTIME_FIRST or WALLTIME_LAST . |
int getSkippedWallTimeOption ()
[icu]获取在正时区偏移转换处理跳过的墙壁时间的行为。
Returns | |
---|---|
int |
the behavior for handling skipped wall time, one of WALLTIME_FIRST , WALLTIME_LAST and WALLTIME_NEXT_VALID . |
long getTimeInMillis ()
长时间返回此日历的当前时间。
Returns | |
---|---|
long |
the current time as UTC milliseconds from the epoch. |
TimeZone getTimeZone ()
返回时区。
Returns | |
---|---|
TimeZone |
the time zone object associated with this calendar. |
String getType ()
[icu]返回此Calendar对象的日历类型名称字符串。 返回的字符串是传统的ICU日历属性值,例如“gregorian”或“japanese”。
请参阅http://www.unicode.org/reports/tr35/#Key_Type_Definitions中有关语言环境ID的日历属性的type =“old type name”
Returns | |
---|---|
String |
legacy calendar type name string |
Calendar.WeekData getWeekData ()
[icu]返回简单的,不可变的类结构类来访问此日历中的周末数据。
Returns | |
---|---|
Calendar.WeekData |
the WeekData for this calendar. |
Calendar.WeekData getWeekDataForRegion (String region)
[icu]返回简单的,不可变的类结构类来访问CLDR周末数据。
Parameters | |
---|---|
region |
String : The input region. The results are undefined if the region code is not valid. |
Returns | |
---|---|
Calendar.WeekData |
the WeekData for the input region. It is never null. |
int hashCode ()
返回此日历的哈希码。
Returns | |
---|---|
int |
a hash code value for this object. |
boolean isEquivalentTo (Calendar other)
[icu]如果给定的Calendar对象与此对象相等,则返回true。 一个等效的日历将像这个一样运行,但它可能被设置为不同的时间。 相比之下,为了使equals()方法返回true,另一个日历必须设置为同一时间。
Parameters | |
---|---|
other |
Calendar : the Calendar to be compared with this Calendar |
Returns | |
---|---|
boolean |
boolean isSet (int field)
确定给定时间字段是否设置了值。
Parameters | |
---|---|
field |
int
|
Returns | |
---|---|
boolean |
true if the given time field has a value set; false otherwise. |
boolean isWeekend (Date date)
[icu]如果给定日期和时间在该日历系统的周末,则返回true。 等同于调用setTime()后跟isWeekend()。 注意:此方法更改此日历设置为的时间。
Parameters | |
---|---|
date |
Date : the date and time |
Returns | |
---|---|
boolean |
true if the given date and time is part of the weekend |
boolean isWeekend ()
[icu]如果此日历的当前日期和时间在该日历系统的周末,则返回true。
Returns | |
---|---|
boolean |
true if the given date and time is part of the weekend |
void roll (int field, boolean up)
在给定字段上滚动(上/下)单个时间单位。 如果该字段超过其最大允许值,它将“换行”回到最小值并继续滚动。 例如,要将当前日期向上滚动一天,您可以调用:
roll(
DATE
, true)
在 YEAR
字段上滚动时,它将在1和通过调用 getMaximum
( YEAR
)返回的值之间的范围内滚动年份值。
在特定字段上滚动时,其他字段的值可能会发生冲突并需要更改。 例如,滚动时MONTH
字段为公历日期96年1月31日上行, DAY_OF_MONTH
字段必须被调整,使得结果为96年2月29日,而不是无效的96年2月31日。
滚动总是意味着及时向前滚动(除非达到了界限,在这种情况下它可能会钉住或包裹),所以对于公历100年,从公元前100年开始,在公元前99年滚动年。 当时代有明确的开始和结束时(如中国历法或日本历史上的大部分时代),那么将这一年的时间限制在一年之后将导致今年回归。 如果时代只有一端有限制,那么试图将年份推迟到该限制将导致将年限定在该限制。 请注意,对于大多数时间为0年(例如佛教,希伯来语或伊斯兰教)的日历而言,添加或滚动可能导致0时代为负值年份(这是表示年前的唯一方式这种日历中的日历时代)。
注意:调用roll(field, true) N次并不一定等同于调用roll(field, N)。 例如,假设你从1995年1月31日的公历日期开始。如果你致电roll(Calendar.MONTH, 2) ,结果将是1995年3月31日。但是如果你致电roll(Calendar.MONTH, true) ,结果将是1995年2月28日。再称之为一次时间将会在1995年3月28日,这通常不是理想的结果。
注意:您应始终使用roll和add,而不是尝试直接在Calendar的字段上执行算术运算。 Calendar子类很有可能具有非线性行为的字段,例如在非闰年期间丢失了几个月或几天。 子类' add和roll方法将考虑到这一点,而简单的算术操作可能会导致无效的结果。
Parameters | |
---|---|
field |
int : the calendar field to roll. |
up |
boolean : indicates if the value of the specified time field is to be rolled up or rolled down. Use true if rolling up, false otherwise. |
Throws | |
---|---|
IllegalArgumentException |
if the field is invalid or refers to a field that cannot be handled by this method. |
也可以看看:
void roll (int field, int amount)
在给定字段上滚动(向上/向下)指定的时间量。 例如,要将当前日期上调三天,您可以致电roll(Calendar.DATE, 3)
。 如果该字段超过其最大允许值,它将“换行”回到最小值并继续滚动。 例如,调用roll(Calendar.DATE, 10)
在公历设置为96年4月25日将产生之日起96年4月5日。
在特定字段上滚动时,其他字段的值可能会发生冲突并需要更改。 例如,当将公历日期1/77/96的MONTH
字段滚动+1时,必须调整DAY_OF_MONTH
字段,以便结果为2/29/96而不是无效的2/31/96。
滚动一个正值总是意味着及时向前滚动(除非达到了界限,在这种情况下它可以钉住或包裹),所以对于公历100年,从公元前100年开始,并将年份加1加1公元前99年。 当时代有明确的开始和结束时(如中国历法或日本历史上的大部分时代),那么将这一年的时间限制在一年之后将导致今年回归。 如果时代只有一端有限制,那么试图将年份推迟到该限制将导致将年限定在该限制。 请注意,对于大多数时间为0年(例如佛教,希伯来语或伊斯兰教)的日历而言,添加或滚动可能导致0时代为负值年份(这是表示年前的唯一方式这种日历中的日历时代)。
[ICU]注:此方法的ICU实现能够滚动除了各个领域ERA
, DST_OFFSET
,并ZONE_OFFSET
。 当然,子类可以增加对roll
覆盖范围内的其他字段的支持。
注意:您应始终使用roll和add,而不是尝试直接在Calendar的字段上执行算术运算。 Calendar子类很可能具有非线性行为的字段,例如在非闰年期间缺少月份或日期。 子类“ add和roll方法将考虑到这一点,而简单的算术操作可能会导致无效的结果。
子类:
roll
这种实现假定字段的行为在其最小值和最大值之间是连续的,这通过调用getActualMinimum
和getActualMaximum
。 对于大多数这样的领域,简单的加法,减法和模数操作足以执行滚动。 对于周相关领域, getFirstDayOfWeek
和getMinimalDaysInFirstWeek
的结果也是必要的。 如果子类的值与默认值不同,子类可以覆盖这两种方法。
具有导致连续性假设roll
字段的子类必须roll
才能专门处理这些字段。 例如,在希伯来日历中,“阿达尔一世”月份只发生在闰年; 在其他几年中,日历从Shevat(第4个月)跳到Adar(第6个月)。 HebrewCalendar.roll
方法考虑到了这一点,因此在非闰年中将Shevat的月份滚动一位给出正确的结果(Adar)。
Parameters | |
---|---|
field |
int : the calendar field to roll. |
amount |
int : the amount by which the field should be rolled. |
Throws | |
---|---|
IllegalArgumentException |
if the field is invalid or refers to a field that cannot be handled by this method. |
也可以看看:
void set (int year, int month, int date, int hour, int minute, int second)
设置字段年,月,日,时,分和秒的值。 其他字段的先前值保留。 如果不需要, clear()
致电clear()
。
Parameters | |
---|---|
year |
int : the value used to set the YEAR time field. |
month |
int : the value used to set the MONTH time field. Month value is 0-based. e.g., 0 for January. |
date |
int : the value used to set the DATE time field. |
hour |
int : the value used to set the HOUR_OF_DAY time field. |
minute |
int : the value used to set the MINUTE time field. |
second |
int : the value used to set the SECOND time field. |
void set (int year, int month, int date, int hour, int minute)
设置字段年,月,日,小时和分钟的值。 其他字段的先前值保留。 如果不需要, clear()
拨打clear()
。
Parameters | |
---|---|
year |
int : the value used to set the YEAR time field. |
month |
int : the value used to set the MONTH time field. Month value is 0-based. e.g., 0 for January. |
date |
int : the value used to set the DATE time field. |
hour |
int : the value used to set the HOUR_OF_DAY time field. |
minute |
int : the value used to set the MINUTE time field. |
void set (int field, int value)
使用给定值设置时间字段。
Parameters | |
---|---|
field |
int : the given time field. |
value |
int : the value to be set for the given time field. |
void set (int year, int month, int date)
设置字段年,月和日期的值。 其他字段的先前值保留。 如果不需要, clear()
拨打clear()
。
Parameters | |
---|---|
year |
int : the value used to set the YEAR time field. |
month |
int : the value used to set the MONTH time field. Month value is 0-based. e.g., 0 for January. |
date |
int : the value used to set the DATE time field. |
void setFirstDayOfWeek (int value)
设置一周中的第一天,其中1 = SUNDAY
和7 = SATURDAY
。
Parameters | |
---|---|
value |
int : the given first day of the week, where 1 = SUNDAY and 7 = SATURDAY . |
void setLenient (boolean lenient)
指定日期/时间解释是否宽松。 在宽松的解释下,“1996年2月942”的日期将被视为等同于1996年2月1日之后的第941天。严格的解释,这些日期将引发异常。
Parameters | |
---|---|
lenient |
boolean
|
也可以看看:
void setMinimalDaysInFirstWeek (int value)
设置一年中第一周所需的最短日期。 例如,如果第一周被定义为包含一年的第一个月的第一天的那一周,则使用值1调用方法。如果它必须是整整一周,则使用值7。
Parameters | |
---|---|
value |
int : the given minimal days required in the first week of the year. |
void setRepeatedWallTimeOption (int option)
[icu]设置在负时区偏移转换时重复多次处理墙壁时间的行为。 例如,2011年11月6日凌晨1:30在美国东部时间(Ameirca / New_York)发生两次; 美国东部时间上午1:30,然后在1小时后的上午1:30。 当使用WALLTIME_FIRST
时,本例中的壁挂时间1:30 AM将被解释为美国东部时间1:30 AM(首次发生)。 当使用WALLTIME_LAST
,它将被解释为美国东部时间上午1:30(最后一次出现)。 默认值是WALLTIME_LAST
。
Parameters | |
---|---|
option |
int : the behavior for handling repeating wall time, either WALLTIME_FIRST or WALLTIME_LAST . |
Throws | |
---|---|
IllegalArgumentException |
when option is neither WALLTIME_FIRST nor WALLTIME_LAST . |
void setSkippedWallTimeOption (int option)
[icu]设置在正时区偏移转换时处理跳过墙壁时间的行为。 例如,美国东部时间2011年3月13日凌晨2:30(美国/纽约)不存在,因为隔夜时间从美国东部时间凌晨1点59分跳到东部时间凌晨3点。 当使用WALLTIME_FIRST
,凌晨2点30分被解释为在美国东部时间凌晨3点之前30分钟,因此将在美国东部时间上午1点30分解决。 当使用WALLTIME_LAST
,凌晨2点30分被解释为凌晨1点59分后的31分钟,因此,将在美国东部时间凌晨3点30分解决。 当使用WALLTIME_NEXT_VALID
,上午2:30将被解析为下一个有效的挂墙时间,即美国东部时间凌晨3点。 默认值是WALLTIME_LAST
。
注意:仅当此日历为lenient
时,此选项才有效。 日历严格时,此类不存在的挂钟时间将导致异常。
Parameters | |
---|---|
option |
int : the behavior for handling skipped wall time at positive time zone offset transitions, one of WALLTIME_FIRST , WALLTIME_LAST and WALLTIME_NEXT_VALID . |
Throws | |
---|---|
IllegalArgumentException |
when option is not any of WALLTIME_FIRST , WALLTIME_LAST and WALLTIME_NEXT_VALID . |
void setTime (Date date)
将此日历的当前时间设置为给定的日期。
注意:调用 setTime
与 Date(Long.MAX_VALUE)
或 Date(Long.MIN_VALUE)
可能会从 get(int)
产生不正确的字段值。
Parameters | |
---|---|
date |
Date : the given Date. |
void setTimeInMillis (long millis)
根据给定的长值设置此日历的当前时间。 在严格模式下,当millis超出Calendar对象允许的范围时,将引发IllegalIcuArgumentException异常。 当处于宽松模式时,超出范围值被固定到它们各自的最小/最大值。
Parameters | |
---|---|
millis |
long : the new time in UTC milliseconds from the epoch. |
void setTimeZone (TimeZone value)
使用给定的时区值设置时区。
Parameters | |
---|---|
value |
TimeZone : the given time zone. |
Calendar setWeekData (Calendar.WeekData wdata)
[icu]根据WeekData输入设置此日历中的数据。
Parameters | |
---|---|
wdata |
Calendar.WeekData : The week data to use |
Returns | |
---|---|
Calendar |
this, for chaining |
String toString ()
返回此日历的字符串表示形式。 此方法仅用于调试目的,并且返回的字符串格式可能因实现而异。 返回的字符串可能为空,但可能不是null
。
Returns | |
---|---|
String |
a string representation of this calendar. |
void computeFields ()
当前毫秒时间值转换为time
的字段值fields[]
。 这将时间字段值与为日历设置的新时间同步。 时间不首先重新计算; 重新计算时间,然后在字段中调用complete
方法。
也可以看看:
void computeGregorianFields (int julianDay)
从Julian日计算公历的年,月和日。 这些值不存储在字段中,而是存储在成员变量gregorianXxx中。 它们用于时区计算,并用于格里高利导数的子类。 子类可能会调用此方法来执行公历日历 - >字段计算。 要执行公历日历字段 - >毫秒计算,请调用computeGregorianMonthStart()。
Parameters | |
---|---|
julianDay |
int
|
int computeGregorianMonthStart (int year, int month)
计算公历一个月的儒略日。 子类可以调用这个方法来执行公历日历fields-> millis计算。 要执行公历日历 - >字段计算,请调用computeGregorianFields()。
Parameters | |
---|---|
year |
int : extended Gregorian year |
month |
int : zero-based Gregorian month |
Returns | |
---|---|
int |
the Julian day number of the day before the first day of the given month in the given extended year |
也可以看看:
int computeMillisInDay ()
从字段计算当天的毫秒数。 这是一个从0到23:59:59.999(含)的值,除非字段超出范围,在这种情况下,它可以是任意值。 此值反映了本地防区墙的时间。
Returns | |
---|---|
int |
int computeZoneOffset (long millis, int millisInDay)
此方法可以假定已设置EXTENDED_YEAR。
Parameters | |
---|---|
millis |
long : milliseconds of the date fields (local midnight millis) |
millisInDay |
int : milliseconds of the time fields; may be out or range. |
Returns | |
---|---|
int |
total zone offset (raw + DST) for the given moment |
String fieldName (int field)
返回字段的字符串名称,用于调试和异常。
Parameters | |
---|---|
field |
int
|
Returns | |
---|---|
String |
int floorDivide (int numerator, int denominator, int[] remainder)
除两个整数,返回商的层数,和模数余数。
与内置分区不同,这在数学上表现良好。 例如, -1/4
=> 0和-1%4
=> -1,但是floorDivide(-1,4)
=> -1并且remainder[0]
=> 3。
Parameters | |
---|---|
numerator |
int : the numerator |
denominator |
int : a divisor which must be > 0 |
remainder |
int : an array of at least one element in which the value numerator mod denominator is returned. Unlike numerator % denominator , this will always be non-negative. |
Returns | |
---|---|
int |
the floor of the quotient. |
int floorDivide (int numerator, int denominator)
除以两个整数,返回商的底线。
与内置分区不同,这在数学上表现良好。 例如, -1/4
=> 0但floorDivide(-1,4)
=> -1。
Parameters | |
---|---|
numerator |
int : the numerator |
denominator |
int : a divisor which must be > 0 |
Returns | |
---|---|
int |
the floor of the quotient. |
long floorDivide (long numerator, long denominator)
分两个长整数,返回商的底线。
与内置分区不同,这在数学上表现良好。 例如, -1/4
=> 0但floorDivide(-1,4)
=> -1。
Parameters | |
---|---|
numerator |
long : the numerator |
denominator |
long : a divisor which must be > 0 |
Returns | |
---|---|
long |
the floor of the quotient. |
int floorDivide (long numerator, int denominator, int[] remainder)
除两个整数,返回商的层数,和模数余数。
与内置分区不同,这在数学上表现良好。 例如, -1/4
=> 0和-1%4
=> -1,但是floorDivide(-1,4)
=> -1并且remainder[0]
=> 3。
Parameters | |
---|---|
numerator |
long : the numerator |
denominator |
int : a divisor which must be > 0 |
remainder |
int : an array of at least one element in which the value numerator mod denominator is returned. Unlike numerator % denominator , this will always be non-negative. |
Returns | |
---|---|
int |
the floor of the quotient. |
int[][][] getFieldResolutionTable ()
返回此日历的字段分辨率数组。 定义附加字段或更改现有字段的语义的日历应该重写此方法以相应地调整字段解析语义。 其他子类不应该重写此方法。
Returns | |
---|---|
int[][][] |
也可以看看:
int getGregorianDayOfMonth ()
根据 computeGregorianFields()
计算的公历日期返回公历日期(从1开始)。
Returns | |
---|---|
int |
也可以看看:
int getGregorianDayOfYear ()
根据 computeGregorianFields()
计算的公历日返回公历日(从1开始)。
Returns | |
---|---|
int |
也可以看看:
int getGregorianMonth ()
按照 computeGregorianFields()
计算结果返回公历上的月份(从0开始)。
Returns | |
---|---|
int |
也可以看看:
int getGregorianYear ()
按照 computeGregorianFields()
计算的公历年返回公历日历。
Returns | |
---|---|
int |
也可以看看:
int getLimit (int field, int limitType)
返回一个字段的限制。
Parameters | |
---|---|
field |
int : the field, from 0..getFieldCount()-1 |
limitType |
int : the type specifier for the limit |
Returns | |
---|---|
int |
int getStamp (int field)
返回一个字段的时间戳。
Parameters | |
---|---|
field |
int
|
Returns | |
---|---|
int |
int gregorianMonthLength (int y, int m)
返回公历的一个月的长度。
Parameters | |
---|---|
y |
int : the extended year |
m |
int : the 0-based month number |
Returns | |
---|---|
int |
the number of days in the given month |
int gregorianPreviousMonthLength (int y, int m)
返回公历日历前一个月的长度。
Parameters | |
---|---|
y |
int : the extended year |
m |
int : the 0-based month number |
Returns | |
---|---|
int |
the number of days in the month previous to the given month |
void handleComputeFields (int julianDay)
子类可以重写此方法来计算特定于每个日历系统的几个字段。 这些是:
另外,子类应该计算任何子类特定的字段,即从BASE_FIELD_COUNT到getFieldCount() - 1的字段。
Calendar
的默认实现实现了纯粹的格雷戈里历。
Parameters | |
---|---|
julianDay |
int
|
int handleComputeJulianDay (int bestField)
子类可以覆盖这个。 此方法调用handleGetMonthLength()以获取日历特定的月份长度。
Parameters | |
---|---|
bestField |
int
|
Returns | |
---|---|
int |
int handleComputeMonthStart (int eyear, int month, boolean useMonth)
返回给定扩展年份中给定月份的第一天之前的Julian日数。 子类应该重写此方法来实现其日历系统。
Parameters | |
---|---|
eyear |
int : the extended year |
month |
int : the zero-based month, or 0 if useMonth is false |
useMonth |
boolean : if false, compute the day before the first day of the given year, otherwise, compute the day before the first day of the given month |
Returns | |
---|---|
int |
the Julian day number of the day before the first day of the given month and year |
int[] handleCreateFields ()
使用超出Calendar
定义的其他字段的子类应该重写此方法以返回具有适当长度的int[]
数组。 长度必须至少为BASE_FIELD_COUNT
且不得超过MAX_FIELD_COUNT
。
Returns | |
---|---|
int[] |
DateFormat handleGetDateFormat (String pattern, String override, Locale locale)
创建适合此日历的DateFormat
。 这是子类重写的框架方法。 此方法负责根据需要创建日历特定的DateFormat和DateFormatSymbols对象。
Parameters | |
---|---|
pattern |
String : the pattern, specific to the DateFormat subclass |
override |
String : The override string. A numbering system override string can take one of the following forms: 1). If just a numbering system name is specified, it applies to all numeric fields in the date format pattern. 2). To specify an alternate numbering system on a field by field basis, use the field letters from the pattern followed by an = sign, followed by the numbering system name. For example, to specify that just the year be formatted using Hebrew digits, use the override "y=hebr". Multiple overrides can be specified in a single string by separating them with a semi-colon. For example, the override string "m=thai;y=deva" would format using Thai digits for the month and Devanagari digits for the year. |
locale |
Locale : the locale for which the symbols should be drawn |
Returns | |
---|---|
DateFormat |
a DateFormat appropriate to this calendar |
DateFormat handleGetDateFormat (String pattern, ULocale locale)
创建适合此日历的DateFormat
。 这是子类重写的框架方法。 此方法负责根据需要创建日历特定的DateFormat和DateFormatSymbols对象。
Parameters | |
---|---|
pattern |
String : the pattern, specific to the DateFormat subclass |
locale |
ULocale : the locale for which the symbols should be drawn |
Returns | |
---|---|
DateFormat |
a DateFormat appropriate to this calendar |
DateFormat handleGetDateFormat (String pattern, Locale locale)
创建适合此日历的DateFormat
。 这是子类重写的框架方法。 此方法负责根据需要创建日历特定的DateFormat和DateFormatSymbols对象。
Parameters | |
---|---|
pattern |
String : the pattern, specific to the DateFormat subclass |
locale |
Locale : the locale for which the symbols should be drawn |
Returns | |
---|---|
DateFormat |
a DateFormat appropriate to this calendar |
int handleGetExtendedYear ()
返回当前字段定义的扩展年份。 这将使用EXTENDED_YEAR字段或特定于日历系统的YEAR和超年字段(如ERA),具体取决于哪一组字段较新。
Returns | |
---|---|
int |
the extended year |
int handleGetLimit (int field, int limitType)
用于定义不同类型限制的子类API。 子类必须实现此方法才能返回以下字段的限制:
ERA YEAR MONTH WEEK_OF_YEAR WEEK_OF_MONTH DAY_OF_MONTH DAY_OF_YEAR DAY_OF_WEEK_IN_MONTH YEAR_WOY EXTENDED_YEAR
Parameters | |
---|---|
field |
int : one of the above field numbers |
limitType |
int : one of MINIMUM , GREATEST_MINIMUM , LEAST_MAXIMUM , or MAXIMUM |
Returns | |
---|---|
int |
int handleGetMonthLength (int extendedYear, int month)
返回此日历系统给定扩展年的给定月份中的天数。 如果子类可以提供比日历中的默认实现更正确或更高效的实现,则子类应该重写此方法。
Parameters | |
---|---|
extendedYear |
int
|
month |
int
|
Returns | |
---|---|
int |
int handleGetYearLength (int eyear)
返回此日历系统的给定扩展年份中的天数。 如果子类可以提供比日历中的默认实现更正确或更高效的实现,则子类应该重写此方法。
Parameters | |
---|---|
eyear |
int
|
Returns | |
---|---|
int |
int internalGet (int field)
返回给定时间字段的值。 这是不触发任何计算的子类的内部方法。
Parameters | |
---|---|
field |
int : the given time field. |
Returns | |
---|---|
int |
the value for the given time field. |
int internalGet (int field, int defaultValue)
返回给定时间字段的值,如果未设置字段,则返回给定的默认值。 这是不触发任何计算的子类的内部方法。
Parameters | |
---|---|
field |
int : the given time field. |
defaultValue |
int : value to return if field is not set |
Returns | |
---|---|
int |
the value for the given time field of defaultValue if the field is unset |
long internalGetTimeInMillis ()
返回当前毫秒数而不重新计算。
Returns | |
---|---|
long |
void internalSet (int field, int value)
将一个字段设置为一个值。 计算字段时子类应使用此方法。 它将stamp[]
数组中的时间戳设置为INTERNALLY_SET
。 如果传入一个不能由子类设置的字段,则引发IllegalArgumentException
。 这可以防止子类修改日历系统不变的字段。
Parameters | |
---|---|
field |
int
|
value |
int
|
boolean isGregorianLeapYear (int year)
确定给定年份是否为闰年。 如果给定的年份是闰年,则返回true。
Parameters | |
---|---|
year |
int : the given year. |
Returns | |
---|---|
boolean |
true if the given year is a leap year; false otherwise. |
int julianDayToDayOfWeek (int julian)
给定Julian日,返回从星期日到星期六的星期几。
Parameters | |
---|---|
julian |
int
|
Returns | |
---|---|
int |
long julianDayToMillis (int julian)
每天将Julian转换为毫秒。
Parameters | |
---|---|
julian |
int : the given Julian day number. |
Returns | |
---|---|
long |
time as milliseconds. |
int millisToJulianDay (long millis)
将时间转换为毫秒到Julian日。
Parameters | |
---|---|
millis |
long : the given milliseconds. |
Returns | |
---|---|
int |
the Julian day number. |
int newerField (int defaultField, int alternateField)
返回更新的字段,即defaultField或alternateField。 如果既没有更新也没有设置,请返回defaultField。
Parameters | |
---|---|
defaultField |
int
|
alternateField |
int
|
Returns | |
---|---|
int |
int newestStamp (int first, int last, int bestStampSoFar)
返回给定范围的字段的最新邮票。
Parameters | |
---|---|
first |
int
|
last |
int
|
bestStampSoFar |
int
|
Returns | |
---|---|
int |
void pinField (int field)
调整指定的字段,使其在日历设置日期的允许范围内。 例如,在公历日历中,设置为4月31日的日历的DAY_OF_MONTH
字段将导致它设置为4月30日。
子类:
此实用程序方法旨在供需要实现其自己的替代roll
和add
的子类使用。
注意: pinField
是以getActualMinimum
和getActualMaximum
。 如果其中任何一种方法对特定字段使用缓慢的迭代算法,则尝试为该字段调用pinField
是不明智的。 如果你真的需要这样做,你应该重写这个方法来为该领域做一些更有效的工作。
Parameters | |
---|---|
field |
int : The calendar field whose value should be pinned. |
void prepareGetActual (int field, boolean isMinimum)
准备这个日历来计算实际的最小值或最大值。 此方法修改此日历的字段; 它在临时日历上被调用。
基本原理:getActualXxx()的语义是返回给定字段可以采用的最大值或最小值,同时考虑其他相关字段。 一般而言,这些其他领域是更大的领域。 例如,当计算实际的最大DAY_OF_MONTH时,DAY_OF_MONTH本身的当前值将被忽略,任何字段的值都会更小。
时间字段都有固定的最小值和最大值,所以我们不需要担心它们。 这也让我们可以将MILLISECONDS_IN_DAY设置为零,以消除时间字段在计算日期字段时可能具有的任何效果。
DAY_OF_WEEK专门针对WEEK_OF_MONTH和WEEK_OF_YEAR字段进行调整,以确保它们的计算正确。
Parameters | |
---|---|
field |
int
|
isMinimum |
boolean
|
int resolveFields (int[][][] precedenceTable)
给定一个优先表,返回表中最新的字段组合,如果没有找到,则返回-1。
优先表是整数的三维数组。 它可能被认为是一组群体。 每个组都是一组线。 每行都是一个字段数组的数组。 在一行中,如果所有字段都已设置,则该行的时间戳将被视为最近设置的字段的标记。 如果某行的任何字段未设置,则该行不匹配。 在一个组中,选择具有最新时间戳的行。 该行的第一个字段将返回以指示哪一行匹配。
在某些情况下,可能需要将行标记为未检查其标记的字段。 例如,如果最佳字段是DAY_OF_WEEK,则可以使用DAY_OF_WEEK_IN_MONTH算法。 为此,请REMAP_RESOLVE | F
的开头插入值REMAP_RESOLVE | F
,其中F
是所需的返回字段值。 这个字段不会被检查; 它只确定返回值,如果行中的其他字段是最新的。
如果一个组的所有行至少包含一个未设置的字段,则不会有任何行匹配,并且该组作为整体将无法匹配。 在这种情况下,下一组将被处理。 如果所有组都不匹配,则返回-1。
Parameters | |
---|---|
precedenceTable |
int
|
Returns | |
---|---|
int |
void validateField (int field)
验证此日历的单个字段。 子类应该重写此方法来验证任何日历特定的字段。 泛型字段可以由Calendar.validateField()
处理。
Parameters | |
---|---|
field |
int
|
也可以看看:
void validateField (int field, int min, int max)
给定其最小和最大允许值,验证此日历的单个字段。 如果该字段超出范围,请输入描述性的IllegalArgumentException
。 子类可以在其实现validateField(int)
使用此方法。
Parameters | |
---|---|
field |
int
|
min |
int
|
max |
int
|
void validateFields ()
通过在已设置的每个字段上调用validateField(int)
,确保每个字段在其有效范围内。 如果此日历不是宽松的,则只应调用此方法。
也可以看看:
int weekNumber (int desiredDay, int dayOfPeriod, int dayOfWeek)
返回一段时间内一天中的星期数。 这可能是一年中的星期数或一个月中的星期数。 通常这会是> = 1的值,但如果期间的某些起始日期从第一周排除,因为getMinimalDaysInFirstWeek
> 1,那么这些起始日期的周数将为零。 此方法需要该日期中的某个已知日期的星期几和星期几,以便确定所需日期的星期几。
子类:
此方法旨在供子类在实现其方法computeTime
和/或computeFields
使用。 它在getActualMinimum
和getActualMaximum
中也很常用。
这个变体可以方便地计算一个星期几的某一天的某一天(通常是该期间的第一天或最后一天)的星期数,但不知道该星期几的某一天的星期几和星期几期间(例如当前日期) 是已知的。
Parameters | |
---|---|
desiredDay |
int : The DAY_OF_YEAR or DAY_OF_MONTH whose week number is desired. Should be 1 for the first day of the period. |
dayOfPeriod |
int : The DAY_OF_YEAR or DAY_OF_MONTH for a day in the period whose DAY_OF_WEEK is specified by the dayOfWeek parameter. Should be 1 for first day of period. |
dayOfWeek |
int : The DAY_OF_WEEK for the day corresponding to the dayOfPeriod parameter. 1-based with 1=Sunday. |
Returns | |
---|---|
int |
The week number (one-based), or zero if the day falls before the first week because getMinimalDaysInFirstWeek is more than one. |
int weekNumber (int dayOfPeriod, int dayOfWeek)
返回一段时间内一天中的星期数。 这可能是一年中的星期数或一个月中的星期数。 通常这会是> = 1的值,但是如果期间的某些起始日期从第一周中排除,因为getMinimalDaysInFirstWeek
> 1,那么在这些起始日期中,周数将为零。 此方法需要给定日期的星期几才能确定结果。
子类:
此方法旨在供子类在实现其方法computeTime
和/或computeFields
使用。 它在getActualMinimum
和getActualMaximum
中也经常有用。
Parameters | |
---|---|
dayOfPeriod |
int : The DAY_OF_YEAR or DAY_OF_MONTH whose week number is desired. Should be 1 for the first day of the period. |
dayOfWeek |
int : The DAY_OF_WEEK for the day corresponding to the dayOfPeriod parameter. 1-based with 1=Sunday. |
Returns | |
---|---|
int |
The week number (one-based), or zero if the day falls before the first week because getMinimalDaysInFirstWeek is more than one. |