Most visited

Recently visited

Added in API level 24

Calendar

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对象和一组整数字段如YEARMONTHDAYHOUR ,等等。 (A Date对象表示在时间上与毫秒精度特定的瞬间。参见Date有关信息Date类)。

的子类Calendar解释一个Date根据特定的日历系统的规则。 ICU4J包含多个实现不同国际日历系统的子类。

像其他区域敏感类一样, Calendar提供了一个类方法, getInstance ,用于获取此类型的通用对象。 CalendargetInstance方法返回适合区域设置的类型的日历,其时间字段已用当前日期和时间初始化:

Calendar rightNow = Calendar.getInstance()

ULocale使用getInstance ,如果存在,则会检索其“ calendar ”标记和值。 如果提供了认可的值,则会提供日历并根据需要进行配置。 目前公认的标签是“佛教”,“中国”,“科普特”,“ethiopic”,“格列高利”,“希伯来”,“伊斯兰”,“伊斯兰民间”,“日本”和“roc”。 例如:

Calendar cal = Calendar.getInstance(new ULocale("en_US@calendar=japanese"));
will return an instance of JapaneseCalendar (using en_US conventions for minimum days in first week, start day of week, et cetera).

一个Calendar对象可以生成实现特定语言和日历样式(例如,Japanese-Gregorian,Japanese-Traditional)的日期时间格式所需的所有时间字段值。 Calendar定义了某些字段返回的值的范围,以及它们的含义。 例如,对于所有日历,今年的第一个月的值为MONTH == JANUARY 其他值由具体子类定义,例如ERAYEAR 有关详细信息,请参阅个别字段文档和子类文档。

当一个Calendar宽松的 ,它接受比它产生更广泛的字段值。 例如,宽松GregorianCalendar解释MONTH == JANUARYDAY_OF_MONTH == 32 2月1日的非宽松GregorianCalendar给定外的范围字段设置时抛出异常。 当日历重新计算字段值以返回get() ,它们将它们归一化。 例如,一个GregorianCalendar始终会生成1和月份长度之间的DAY_OF_MONTH值。

Calendar使用两个参数来定义特定于区域的七天周:一周的第一天和第一周的最小日期(从1到7)。 当构建Calendar时,这些数字取自语言环境资源数据。 它们也可以通过API明确指定。

在设置或获取WEEK_OF_MONTHWEEK_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等。

信息不一致。 如果字段冲突,则日历将优先考虑最近设置的字段。 例如,确定日期时,日历将查找以下字段组合之一。 将使用由最近设置的单个字段确定的最近的组合。

 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
For the time of day:
 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或更高版本中可用。

注意:对于一些非公历日历,可能需要不同的字段才能完全消除歧义。 例如,在某些情况下,历史阿拉伯天文日历的完整规范要求年,月,日星期几。

注意:在某些单数时间的解释中可能存在一些含糊不清的情况,这些问题可以通过以下方式解决:

  1. 24:00:00 "belongs" to the following day. That is, 23:59 on Dec 31, 1969 < 24:00 on Jan 1, 1970 < 24:01:00 on Jan 1, 1970
  2. Although historically not precise, midnight also belongs to "am", and noon belongs to "pm", so on the same day, 12:00 am (midnight) < 12:01 am, and 12:00 pm (noon) < 12:01 pm

日期或时间格式字符串不是日历定义的一部分,因为这些字符串在运行时必须可由用户修改或覆盖。 使用DateFormat格式化日期。

现场操作方法

Calendar :字段可以用三种方法来改变 set()add() ,并 roll()

set(f, value)变化领域fvalue 另外,它设置一个内部成员变量来指示字段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年添加规则1MONTH场至九月,因为加入13个月月给明年九月。 由于DAY_OF_MONTHGregorianCalendar中的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() ,取决于是否应该影响较大的字段,用户界面可以按大多数用户直观预期的方式行事。

注意:您应始终使用rolladd而不是尝试直接在Calendar的字段上执行算术运算。 Calendar子类非常有可能具有非线性行为的字段,例如在非闰年期间丢失了几个月或几天。 子类' addroll方法将考虑到这一点,而简单的算术操作可能会导致无效的结果。

ICU4J中的日历体系结构

最近,为了更好地支持子类化, Calendar的实现发生了显着变化。 原来的Calendar类被设计为支持子类化,但它只有一个实现的子类, GregorianCalendar 随着一些新的日历的子类,包括实施BuddhistCalendarChineseCalendarHebrewCalendarIslamicCalendar ,并JapaneseCalendar ,该子类API已经被彻底重新设计。 本节详细介绍了新的子类的API和其他方式, android.icu.util.Calendar不同于java.util.Calendar

变化

经典 Calendar架构与新架构之间的变化概述。

子类API

原始的Calendar API基于实现仅一个子类GregorianCalendar 结果,所有的子类化扭结都没有制定出来。 新的子类化API已经根据几个实现的子类进行了改进。 这包括必须重写的方法和子类调用的方法。 子类不再可以直接访问fieldsstamp 相反,他们有新的API来访问这些。 子类能够通过受保护的框架方法分配fields数组; 这允许子类指定附加字段。

更多的功能已被移入基类。 基类现在包含许多用于支持公历的计算机器。 这是基于两件事情:(1)许多日历是基于公历(如佛教和日本的皇帝日历)。 (2) 所有日历都需要基本的格里高利支持才能处理时区计算。

常见的计算已被移入Calendar 子类不再计算周相关字段和时间相关字段。 这些通常由基类为所有日历处理。

子类计算时间=>字段

ERAYEAREXTENDED_YEARMONTHDAY_OF_MONTH ,并DAY_OF_YEAR字段由子类计算的基础上,儒略日。 所有其他字段由Calendar计算。

子类计算字段=>时间

大多数字段值的解释完全由Calendar处理。 Calendar确定设置哪些字段,哪些不是,最近设置的字段等等。 另外, Calendar处理来自时间字段的时间计算并处理与周有关的字段。 子类必须做的唯一事情就是根据年份字段确定延长的年份,然后,给定延长的年份和月份,它必须返回一个Julian天数。

其他方法

规范化的行为

所有日历系统中的某些字段的行为已保持一致,并在 Calendar实施。

支持的范围

Calendar的允许范围已缩小。 GregorianCalendar用于尝试支持从Long.MIN_VALUELong.MAX_VALUE毫秒值的日期范围。 这引入了令人尴尬的构造(黑客),这会降低性能。 它还在边界引入了不一致的行为。 新的Calendar协议规定可支持日期的最大范围为Julian日数为-0x7F000000+0x7F000000 这相当于从公元前5,800,000到公元5,800,000的年数。 程序员应该使用Calendar的受保护的常量来指定非常早或非常晚的日期。

一般注意事项

也可以看看:

Summary

Nested classes

class Calendar.WeekData

用于访问CLDR周末数据的简单,不可变的类结构类。

Constants

int AM

AM_PM字段的值表示从午夜到中午之前的一天的时间段。

int AM_PM

getset字段编号指示 HOUR是在中午之前还是之后。

int APRIL

指示一年中的第四个月的 MONTH字段的值。

int AUGUST

指示一年中的第八个月的 MONTH字段的值。

int BASE_FIELD_COUNT

此类定义的字段数。

int DATE

getset字段编号指示月份的日期。

int DAY_OF_MONTH

getset字段编号指示月份的当天。

int DAY_OF_WEEK

表示星期几的 getset字段编号。

int DAY_OF_WEEK_IN_MONTH

getset字段编号,指示当前月份中一周中的第几天的序号。

int DAY_OF_YEAR

getset字段编号,指示当年的日期编号。

int DECEMBER

MONTH字段的值表示一年中的第十二个月。

int DOW_LOCAL

[icu] get()set()字段编号,指示当地的当天。

int DST_OFFSET

getset字段编号,指示以毫秒为单位的夏令时偏移量。

int EPOCH_JULIAN_DAY

这个时代的Julian日,即1970年1月1日的公历日。

int ERA

getset字段编号指示Julian日历中的时代,例如AD或BC。

int EXTENDED_YEAR

[icu] get()set()字段编号,表示延长的年份。

int FEBRUARY

指示一年中第二个月的 MONTH字段的值。

int FRIDAY

指示周五的 DAY_OF_WEEK字段的值。

int GREATEST_MINIMUM

限制类型为 getLimit()handleGetLimit()指示字段可以采用的最大最小值。

int HOUR

getset字段编号表示上午或下午的小时。

int HOUR_OF_DAY

getset字段编号指示当天的小时。

int INTERNALLY_SET

时间戳 stamp[]值指示已经通过时间或其他字段的计算设置了字段。

int IS_LEAP_MONTH

[icu]指示当前月份是否为闰月的字段。

int JANUARY

指示一年中第一个月的 MONTH字段的值。

int JAN_1_1_JULIAN_DAY

格里历时代的Julian日,即公历1月1日1日。

int JULIAN_DAY

[icu] get()set()字段编号,指示修改的Julian日数。

int JULY

指示一年中第七个月的 MONTH字段的值。

int JUNE

指示一年中的第六个月的 MONTH字段的值。

int LEAST_MAXIMUM

限制类型为 getLimit()handleGetLimit()指示字段可以采用的最小最大值。

int MARCH

指示一年中第三个月的 MONTH字段的值。

int MAXIMUM

限制类型为 getLimit()handleGetLimit()指示字段可以采用的最大值(最大值)。

int MAX_FIELD_COUNT

可能的最大数量的字段。

int MAX_JULIAN

最大支持的朱利安日。

long MAX_MILLIS

支持的最大纪元毫秒数。

int MAY

指示一年中第五个月的 MONTH字段的值。

int MILLISECOND

getset字段编号指示第二秒内的毫秒数。

int MILLISECONDS_IN_DAY

[icu] get()set()字段编号,指示当天的毫秒数。

int MINIMUM

限制类型为 getLimit()handleGetLimit()指示字段可以采用的最小值(最小值)。

int MINIMUM_USER_STAMP

如果时间戳 stamp[]的值大于或等于 MINIMUM_USER_SET则它已由用户通过调用 set()

int MINUTE

getset字段编号表示一小时内的分钟数。

int MIN_JULIAN

最低支持的Julian日。

long MIN_MILLIS

支持的最小时间毫秒数。

int MONDAY

指示星期一的 DAY_OF_WEEK字段的值。

int MONTH

表示月份的字段号为 getset

int NOVEMBER

指示一年中的第十一个月的 MONTH字段的值。

int OCTOBER

指示一年中第10个月的 MONTH字段的值。

long ONE_DAY

一天中的毫秒数。

int ONE_HOUR

一小时内的毫秒数。

int ONE_MINUTE

一分钟内的毫秒数。

int ONE_SECOND

一秒钟内的毫秒数。

long ONE_WEEK

一周内的毫秒数。

int PM

AM_PM字段的值表示从中午到午夜之前的一天的时间段。

int RESOLVE_REMAP

对重新映射的解析表字段值进行或运算的值。

int SATURDAY

指示星期六的 DAY_OF_WEEK字段的值。

int SECOND

getset字段编号表示分钟内的第二个。

int SEPTEMBER

指示一年中第九个月的 MONTH字段的值。

int SUNDAY

指示周日的 DAY_OF_WEEK字段的值。

int THURSDAY

指示星期四的 DAY_OF_WEEK字段的值。

int TUESDAY

指示周二的 DAY_OF_WEEK字段的值。

int UNDECIMBER

MONTH字段的值表示一年中的第十三个月。

int UNSET

时间戳 stamp[]值指示自上次调用 clear()以来未设置字段。

int WALLTIME_FIRST

[icu]setRepeatedWallTimeOption(int)setSkippedWallTimeOption(int)使用的 setRepeatedWallTimeOption(int) ,指定不明确的墙壁时间以被解释为最早的。

int WALLTIME_LAST

[icu]setRepeatedWallTimeOption(int)setSkippedWallTimeOption(int)使用的 setRepeatedWallTimeOption(int) ,指定不明确的墙壁时间以解释为最新的。

int WALLTIME_NEXT_VALID

[icu]setSkippedWallTimeOption(int)使用的选项,指定不明确的墙壁时间以解释为下一个有效的墙壁时间。

int WEDNESDAY

指示周三的 DAY_OF_WEEK字段的值。

int WEEK_OF_MONTH

getset字段编号,指示当前月份内的星期编号。

int WEEK_OF_YEAR

getset字段编号,指示当前年份内的星期编号。

int YEAR

表示年份的字段号为 getset

int YEAR_WOY

[icu] get()set()字段编号,指示对应于 WEEK_OF_YEAR字段的扩展年份。

int ZONE_OFFSET

getset字段编号,指示以毫秒为单位的GMT的原始偏移量。

Fields

protected static final Date MAX_DATE

最大支持 Date

protected static final Date MIN_DATE

最低支持 Date

Protected constructors

Calendar()

使用默认时区和默认的 FORMAT区域设置构造日历。

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)

比较两个 Calendar对象所代表的时间(单位为 Calendar

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

DateFormat getDateTimeFormat(int dateStyle, int timeStyle, Locale loc)

[icu]返回适合此日历的 DateFormat

String getDisplayName(ULocale loc)

以给定语言环境的语言返回此日历的名称。

String getDisplayName(Locale loc)

以给定语言环境的语言返回此日历的名称。

final int getFieldCount()

[icu]返回此日历定义的字段数。

int getFirstDayOfWeek()

返回一周中的第一天,其中1 = SUNDAY和7 = SATURDAY

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)

设置一周中的第一天,其中1 = SUNDAY和7 = SATURDAY

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()

当前毫秒时间值转换为 time的字段值 fields[]

final void computeGregorianFields(int julianDay)

从Julian日计算公历的年,月和日。

int computeGregorianMonthStart(int year, int month)

计算公历一个月的儒略日。

int computeJulianDay()

计算此日历字段指定的Julian日数。

int computeMillisInDay()

从字段计算当天的毫秒数。

void computeTime()

fields[]的当前字段值转换为毫秒时间值 time

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()

根据 computeGregorianFields()计算的公历日期返回公历日期(从1开始)。

final int getGregorianDayOfYear()

根据 computeGregorianFields()计算的公历中的年份(从1开始)。

final int getGregorianMonth()

按照 computeGregorianFields()计算结果返回公历上的月份(从0开始)。

final int getGregorianYear()

按照 computeGregorianFields()计算的公历年返回公历日历。

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()

使用超出 Calendar定义的字段的子类应该重写此方法以返回适当长度的 int[]数组。

DateFormat handleGetDateFormat(String pattern, String override, Locale locale)

创建适合此日历的 DateFormat

DateFormat handleGetDateFormat(String pattern, ULocale locale)

创建适合此日历的 DateFormat

DateFormat handleGetDateFormat(String pattern, Locale locale)

创建适合此日历的 DateFormat

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()

通过在已设置的每个字段上调用 validateField(int) ,确保每个字段在有效范围内。

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

Constants

AM

Added in API level 24
int AM

AM_PM字段的值表示从午夜到中午之前的一天的时段。

常量值:0(0x00000000)

AM_PM

Added in API level 24
int AM_PM

getset字段编号,指示HOUR是在中午之前还是之后。 例如,在10:04:15.250 PM, AM_PMPM

也可以看看:

常量值:9(0x00000009)

APRIL

Added in API level 24
int APRIL

指示一年中的第四个月的 MONTH字段的值。

常量值:3(0x00000003)

AUGUST

Added in API level 24
int AUGUST

指示一年中的第八个月的 MONTH字段的值。

常量值:7(0x00000007)

BASE_FIELD_COUNT

Added in API level 24
int BASE_FIELD_COUNT

此类定义的字段数。 子类可以定义以这个数字开始的附加字段。

常量值:23(0x00000017)

DATE

Added in API level 24
int DATE

getset字段编号,指示月份的日期。 这是DAY_OF_MONTH的同义词。 本月的第一天有值1。

也可以看看:

常量值:5(0x00000005)

DAY_OF_MONTH

Added in API level 24
int DAY_OF_MONTH

getset字段编号指示月份的日期。 这是DATE的同义词。 本月的第一天有值1。

也可以看看:

常量值:5(0x00000005)

DAY_OF_WEEK

Added in API level 24
int DAY_OF_WEEK

表示星期几的getset字段编号。 此字段值SUNDAYMONDAYTUESDAYWEDNESDAYTHURSDAYFRIDAY ,并SATURDAY

也可以看看:

常量值:7(0x00000007)

DAY_OF_WEEK_IN_MONTH

Added in API level 24
int DAY_OF_WEEK_IN_MONTH

getset字段编号,指示当前月份中一周的第几天的序号。 DAY_OF_WEEK字段一起,这个唯一地指定一个月内的一天。 不像WEEK_OF_MONTHWEEK_OF_YEAR ,该字段的值并不取决于getFirstDayOfWeek()或者getMinimalDaysInFirstWeek() DAY_OF_MONTH 17总是对应于DAY_OF_WEEK_IN_MONTH 1 ; 815对应于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)

DAY_OF_YEAR

Added in API level 24
int DAY_OF_YEAR

getset字段编号,指示当年的日期编号。 今年的第一天有价值1。

常数值:6(0x00000006)

DECEMBER

Added in API level 24
int DECEMBER

指示一年中第十二个月的 MONTH字段的值。

常量值:11(0x0000000b)

DOW_LOCAL

Added in API level 24
int DOW_LOCAL

[icu] get()set()字段编号,指示当地的当天。 这将是从1到7的一个值,其中1是本地化的第一天。

常量值:18(0x00000012)

DST_OFFSET

Added in API level 24
int DST_OFFSET

getset字段编号,指示以毫秒为单位的夏令时偏移。

常量值:16(0x00000010)

EPOCH_JULIAN_DAY

Added in API level 24
int EPOCH_JULIAN_DAY

这个时代的Julian日,即1970年1月1日的公历日。

常量值:2440588(0x00253d8c)

ERA

Added in API level 24
int ERA

用于指示时代的getset字段号,例如Julian日历中的AD或BC。 这是一个日历特定的值; 请参阅子类文档。

也可以看看:

常量值:0(0x00000000)

EXTENDED_YEAR

Added in API level 24
int EXTENDED_YEAR

[icu] get()set()字段数字表示延长的年份。 这是一个指定该日历系统年份的单一数字,涵盖所有超过一年的字段。 例如,对于朱利安日历系统,年份数字是积极的,具有BCE或CE的时代。 Julian日历系统的扩展年价值为CE年分配正值,BCE年为负值,1 BCE为0年。

常量值:19(0x00000013)

FEBRUARY

Added in API level 24
int FEBRUARY

指示一年中第二个月的 MONTH字段的值。

常数值:1(0x00000001)

FRIDAY

Added in API level 24
int FRIDAY

指示星期五的 DAY_OF_WEEK字段的值。

常数值:6(0x00000006)

GREATEST_MINIMUM

Added in API level 24
int GREATEST_MINIMUM

限制类型为 getLimit()handleGetLimit()指示字段可以采用的最大最小值。

也可以看看:

常数值:1(0x00000001)

HOUR

Added in API level 24
int HOUR

表示上午或下午的小时的getset字段编号。 HOUR用于12小时制。 例如,在10:04:15.250 PM HOUR是10。

也可以看看:

常量值:10(0x0000000a)

HOUR_OF_DAY

Added in API level 24
int HOUR_OF_DAY

指示一天中的小时的getset字段编号。 HOUR_OF_DAY用于24小时制。 例如,在10:04:15.250 PM, HOUR_OF_DAY是22。

也可以看看:

常量值:11(0x0000000b)

INTERNALLY_SET

Added in API level 24
int INTERNALLY_SET

时间戳 stamp[]值指示已经通过时间或其他字段的计算设置了字段。

也可以看看:

常数值:1(0x00000001)

IS_LEAP_MONTH

Added in API level 24
int IS_LEAP_MONTH

[icu]指示当前月份是否为闰月的字段。 非闰月的值应为0,闰月的值应为1。

常量值:22(0x00000016)

JANUARY

Added in API level 24
int JANUARY

指示一年中第一个月的 MONTH字段的值。

常量值:0(0x00000000)

JAN_1_1_JULIAN_DAY

Added in API level 24
int JAN_1_1_JULIAN_DAY

格里历时代的Julian日,即公历1月1日1日。

常量值:1721426(0x001a4452)

JULIAN_DAY

Added in API level 24
int JULIAN_DAY

[icu] get()set()字段编号,指示修改的儒略日数。 这与两个方面的传统儒略日数不同。 首先,它在午夜的当地区域划分日期,而不是格林尼治标准时间的中午。 其次,它是一个本地号码; 也就是说,这取决于当地的时区。 它可以被认为是包含所有日期相关字段的单个数字。

常量值:20(0x00000014)

JULY

Added in API level 24
int JULY

指示一年中第七个月的 MONTH字段的值。

常数值:6(0x00000006)

JUNE

Added in API level 24
int JUNE

指示一年中的第六个月的 MONTH字段的值。

常量值:5(0x00000005)

LEAST_MAXIMUM

Added in API level 24
int LEAST_MAXIMUM

限制类型为 getLimit()handleGetLimit()指示字段可以采用的最小值。

也可以看看:

常量值:2(0x00000002)

MARCH

Added in API level 24
int MARCH

指示一年中第三个月的 MONTH字段的值。

常量值:2(0x00000002)

MAXIMUM

Added in API level 24
int MAXIMUM

限制类型为 getLimit()handleGetLimit()指示字段可以采用的最大值(最大值)。

也可以看看:

常量值:3(0x00000003)

MAX_FIELD_COUNT

Added in API level 24
int MAX_FIELD_COUNT

可能的最大数量的字段。 子类不能定义比此数字更多的总字段。

常量值:32(0x00000020)

MAX_JULIAN

Added in API level 24
int MAX_JULIAN

最大支持的朱利安日。 该值相当于MAX_MILLISMAX_DATE

也可以看看:

常量值:2130706432(0x7f000000)

MAX_MILLIS

Added in API level 24
long MAX_MILLIS

支持的最大纪元毫秒数。 该值相当于MAX_JULIANMAX_DATE

常量值:183882168921600000(0x028d47dbbf19b000)

MAY

Added in API level 24
int MAY

指示一年中的第五个月的 MONTH字段的值。

常量值:4(0x00000004)

MILLISECOND

Added in API level 24
int MILLISECOND

getset字段编号表示秒内的毫秒数。 例如,在10:04:15.250 PM, MILLISECOND是250。

常量值:14(0x0000000e)

MILLISECONDS_IN_DAY

Added in API level 24
int MILLISECONDS_IN_DAY

[icu] get()set()字段编号,指示当天的毫秒数。 范围从0到23:59:59.999(不考虑DST)。 该字段的行为完全类似于所有时间相关字段的组合,不包括区域字段。 因此,它也反映了DST过渡日的这些领域的不连续性。 在夏令时开始的一天,它会跳跃前进。 在DST停止的一天,它会后退。 这反映了必须与DST_OFFSET字段组合以获得唯一的本地时间值的事实。

常量值:21(0x00000015)

MINIMUM

Added in API level 24
int MINIMUM

限制类型为 getLimit()handleGetLimit()指示字段可以采用的最小值(最小值)。

也可以看看:

常量值:0(0x00000000)

MINIMUM_USER_STAMP

Added in API level 24
int MINIMUM_USER_STAMP

如果时间戳 stamp[]的值大于或等于 MINIMUM_USER_SET那么它已由用户通过调用 set()set()

也可以看看:

常量值:2(0x00000002)

MINUTE

Added in API level 24
int MINUTE

getset字段编号表示一小时内的分钟数。 例如,在10:04:15.250 PM, MINUTE是4。

常量值:12(0x0000000c)

MIN_JULIAN

Added in API level 24
int MIN_JULIAN

最低支持的Julian日。 该值相当于MIN_MILLISMIN_DATE

也可以看看:

常量值:-2130706432(0x81000000)

MIN_MILLIS

Added in API level 24
long MIN_MILLIS

支持的最小时间毫秒数。 该值相当于MIN_JULIANMIN_DATE

常量值:-184303902528000000(0xfd713893bf19b000)

MONDAY

Added in API level 24
int MONDAY

指示星期一的 DAY_OF_WEEK字段的值。

常量值:2(0x00000002)

MONTH

Added in API level 24
int MONTH

指示月份的getset字段编号。 这是一个日历特定的值。 一年的第一个月是JANUARY ; 最后一个取决于一年中的月数。

也可以看看:

常量值:2(0x00000002)

NOVEMBER

Added in API level 24
int NOVEMBER

指示一年中的第十一个月的 MONTH字段的值。

常量值:10(0x0000000a)

OCTOBER

Added in API level 24
int OCTOBER

指示一年中第十个月的 MONTH字段的值。

常量值:9(0x00000009)

ONE_DAY

Added in API level 24
long ONE_DAY

一天中的毫秒数。 尽管ONE_DAY和ONE_WEEK可以装入整数,但为了防止执行时的算术溢出(错误4173516),它们必须很长。

常量值:86400000(0x0000000005265c00)

ONE_HOUR

Added in API level 24
int ONE_HOUR

一小时内的毫秒数。

常量值:3600000(0x0036ee80)

ONE_MINUTE

Added in API level 24
int ONE_MINUTE

一分钟内的毫秒数。

常量值:60000(0x0000ea60)

ONE_SECOND

Added in API level 24
int ONE_SECOND

一秒钟内的毫秒数。

常量值:1000(0x000003e8)

ONE_WEEK

Added in API level 24
long ONE_WEEK

一周内的毫秒数。 尽管ONE_DAY和ONE_WEEK可以装入整数,但为了防止执行时的算术溢出(错误4173516),它们必须很长。

常量值:604800000(0x00000000240c8400)

PM

Added in API level 24
int PM

AM_PM字段的值指示从中午到午夜之前的一天的时间段。

常数值:1(0x00000001)

RESOLVE_REMAP

Added in API level 24
int RESOLVE_REMAP

对重新映射的解析表字段值进行或运算的值。

也可以看看:

常量值:32(0x00000020)

SATURDAY

Added in API level 24
int SATURDAY

指示星期六的 DAY_OF_WEEK字段的值。

常量值:7(0x00000007)

SECOND

Added in API level 24
int SECOND

getset字段编号指示分钟内的第二个字段。 例如,在10:04:15.250 PM SECOND是15。

常量值:13(0x0000000d)

SEPTEMBER

Added in API level 24
int SEPTEMBER

指示一年中第九个月的 MONTH字段的值。

常量值:8(0x00000008)

SUNDAY

Added in API level 24
int SUNDAY

指示周日的 DAY_OF_WEEK字段的值。

常数值:1(0x00000001)

THURSDAY

Added in API level 24
int THURSDAY

指示星期四的 DAY_OF_WEEK字段的值。

常量值:5(0x00000005)

TUESDAY

Added in API level 24
int TUESDAY

指示星期二的 DAY_OF_WEEK字段的值。

常量值:3(0x00000003)

UNDECIMBER

Added in API level 24
int UNDECIMBER

MONTH字段的值表示一年中的第13个月。 虽然GregorianCalendar不使用此值,但月历可以。

常量值:12(0x0000000c)

UNSET

Added in API level 24
int UNSET

时间戳 stamp[]值指示自从上次调用 clear()以来没有设置字段。

也可以看看:

常量值:0(0x00000000)

WALLTIME_FIRST

Added in API level 24
int WALLTIME_FIRST

[icu]setRepeatedWallTimeOption(int)setSkippedWallTimeOption(int)使用的 setRepeatedWallTimeOption(int) ,指定不明确的墙壁时间被解释为最早的。

也可以看看:

常数值:1(0x00000001)

WALLTIME_LAST

Added in API level 24
int WALLTIME_LAST

[icu]setRepeatedWallTimeOption(int)setSkippedWallTimeOption(int)使用的 setRepeatedWallTimeOption(int) ,指定了模糊的墙壁时间以解释为最新的。

也可以看看:

常量值:0(0x00000000)

WALLTIME_NEXT_VALID

Added in API level 24
int WALLTIME_NEXT_VALID

[icu] setSkippedWallTimeOption(int)使用的选项,指定不明确的墙壁时间以解释为下一个有效的墙壁时间。

也可以看看:

常量值:2(0x00000002)

WEDNESDAY

Added in API level 24
int WEDNESDAY

指示周三的 DAY_OF_WEEK字段的值。

常量值:4(0x00000004)

WEEK_OF_MONTH

Added in API level 24
int WEEK_OF_MONTH

getset字段编号,指示当前月份内的星期编号。 getFirstDayOfWeek()getMinimalDaysInFirstWeek()所定义的月份的第一个星期的值为1,子类在该月的第一周之前的天数定义了WEEK_OF_MONTH的值。

也可以看看:

常量值:4(0x00000004)

WEEK_OF_YEAR

Added in API level 24
int WEEK_OF_YEAR

getset字段编号,指示当前年份内的星期编号。 getFirstDayOfWeek()getMinimalDaysInFirstWeek()定义的年度第一周的值为1.子类在一年的第一周之前定义了天数为WEEK_OF_YEAR的天数。

也可以看看:

常量值:3(0x00000003)

YEAR

Added in API level 24
int YEAR

表示年份的字段号为getset 这是一个日历特定的值; 请参阅子类文档。

常数值:1(0x00000001)

YEAR_WOY

Added in API level 24
int YEAR_WOY

[icu] get()set()字段编号,指示对应于WEEK_OF_YEAR字段的扩展年份。 这可能大于或小于EXTENDED_YEAR的值。

常量值:17(0x00000011)

ZONE_OFFSET

Added in API level 24
int ZONE_OFFSET

getset字段编号,指示以毫秒为单位的GMT的原始偏移量。

常量值:15(0x0000000f)

Fields

MAX_DATE

Added in API level 24
Date MAX_DATE

最大支持Date 该值相当于MAX_JULIANMAX_MILLIS

MIN_DATE

Added in API level 24
Date MIN_DATE

最低支持Date 该值相当于MIN_JULIANMIN_MILLIS

Protected constructors

Calendar

Added in API level 24
Calendar ()

使用默认时区和默认的 FORMAT区域设置构建日历。

也可以看看:

Calendar

Added in API level 24
Calendar (TimeZone zone, 
                Locale aLocale)

使用指定的时区和区域设置构建日历。

Parameters
zone TimeZone: the time zone to use
aLocale Locale: the locale for the week data

Calendar

Added in API level 24
Calendar (TimeZone zone, 
                ULocale locale)

使用指定的时区和区域设置构建日历。

Parameters
zone TimeZone: the time zone to use
locale ULocale: the ulocale for the week data

Public methods

add

Added in API level 24
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实现能够添加到所有领域,除了ERADST_OFFSET ,并ZONE_OFFSET 当然,子类可以增加对add的替代字段中的其他字段的支持。

注意:您应始终使用rolladd,而不是尝试直接在Calendar的字段上执行算术运算。 Calendar子类非常有可能具有非线性行为的字段,例如在非闰年期间丢失了几个月或几天。 子类“ addroll方法将考虑到这一点,而简单的算术操作可能会导致无效结果。

子类:
add这种实现假定该字段的行为在其最小值和最大值之间是连续的,这通过调用getActualMinimumgetActualMaximum 对于这样的字段,简单的算术运算就足以执行添加。

具有这种连续性假设破坏的字段的子类必须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.

也可以看看:

after

Added in API level 24
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.

before

Added in API level 24
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.

clear

Added in API level 24
void clear ()

清除所有时间字段的值。

clear

Added in API level 24
void clear (int field)

清除给定时间字段中的值。

Parameters
field int: the time field to be cleared.

clone

Added in API level 24
Object clone ()

覆盖可复制

Returns
Object a clone of this instance.

compareTo

Added in API level 24
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.

equals

Added in API level 24
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.

fieldDifference

Added in API level 24
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.

get

Added in API level 24
int get (int field)

返回给定时间字段的值。

Parameters
field int: the given time field.
Returns
int the value for the given time field.

getActualMaximum

Added in API level 24
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

也可以看看:

getActualMinimum

Added in API level 24
int getActualMinimum (int field)

给定当前日期,返回此字段可能具有的最小值。 对于大多数领域,这与getMinimumgetGreatestMinimum相同。 但是,一些领域,特别是与周数相关的领域更加复杂。

例如,假设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

也可以看看:

getAvailableLocales

Added in API level 24
Locale[] getAvailableLocales ()

返回安装日历的语言环境列表。

Returns
Locale[] the list of locales for which Calendars are installed.

getDateTimeFormat

Added in API level 24
DateFormat getDateTimeFormat (int dateStyle, 
                int timeStyle, 
                ULocale loc)

[icu]返回适合此日历的DateFormat 希望专门化此行为的子类应覆盖handleGetDateFormat(String, ULocale)

Parameters
dateStyle int
timeStyle int
loc ULocale
Returns
DateFormat

getDateTimeFormat

Added in API level 24
DateFormat getDateTimeFormat (int dateStyle, 
                int timeStyle, 
                Locale loc)

[icu]返回适合此日历的DateFormat 希望专门化此行为的子类应覆盖handleGetDateFormat(String, ULocale)

Parameters
dateStyle int
timeStyle int
loc Locale
Returns
DateFormat

getDisplayName

Added in API level 24
String getDisplayName (ULocale loc)

以给定语言环境的语言返回此日历的名称。

Parameters
loc ULocale
Returns
String

getDisplayName

Added in API level 24
String getDisplayName (Locale loc)

以给定语言环境的语言返回此日历的名称。

Parameters
loc Locale
Returns
String

getFieldCount

Added in API level 24
int getFieldCount ()

[icu]返回此日历定义的字段数。 set()get()有效字段参数是0..getFieldCount()-1

Returns
int

getFirstDayOfWeek

Added in API level 24
int getFirstDayOfWeek ()

返回一周中的第一天,其中1 = SUNDAY和7 = SATURDAY 如周日在美国,周一在法国

Returns
int the first day of the week, where 1 = SUNDAY and 7 = SATURDAY.

getGreatestMinimum

Added in API level 24
int getGreatestMinimum (int field)

如果变化,则返回给定字段的最大最小值。 否则与getMinimum()相同。 对于格里高利来说,没有区别。

Parameters
field int: the given time field.
Returns
int the highest minimum value for the given time field.

getInstance

Added in API level 24
Calendar getInstance ()

使用默认时区和区域设置返回日历。

Returns
Calendar a Calendar.

getInstance

Added in API level 24
Calendar getInstance (Locale aLocale)

使用默认时区和指定区域设置返回日历。

Parameters
aLocale Locale: the locale for the week data
Returns
Calendar a Calendar.

getInstance

Added in API level 24
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.

getInstance

Added in API level 24
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.

getInstance

Added in API level 24
Calendar getInstance (TimeZone zone)

使用指定的时区和默认语言环境返回日历。

Parameters
zone TimeZone: the time zone to use
Returns
Calendar a Calendar.

getInstance

Added in API level 24
Calendar getInstance (ULocale locale)

使用默认时区和指定区域设置返回日历。

Parameters
locale ULocale: the ulocale for the week data
Returns
Calendar a Calendar.

getKeywordValuesForLocale

Added in API level 24
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.

getLeastMaximum

Added in API level 24
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.

getMaximum

Added in API level 24
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.

getMinimalDaysInFirstWeek

Added in API level 24
int getMinimalDaysInFirstWeek ()

返回一年中第一周所需的最短日期。 也就是说,如果第一周定义为包含一年中第一个月的第一天的那一周,则getMinimalDaysInFirstWeek返回1.如果所需的最短天数必须为整周,getMinimalDaysInFirstWeek返回7。

Returns
int the minimal days required in the first week of the year.

getMinimum

Added in API level 24
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.

getRepeatedWallTimeOption

Added in API level 24
int getRepeatedWallTimeOption ()

[icu]获取在负时区偏移转换时重复多次重复墙壁时间的行为。

Returns
int the behavior for handling repeating wall time, either WALLTIME_FIRST or WALLTIME_LAST.

也可以看看:

getSkippedWallTimeOption

Added in API level 24
int getSkippedWallTimeOption ()

[icu]获取在正时区偏移转换处理跳过的墙壁时间的行为。

Returns
int the behavior for handling skipped wall time, one of WALLTIME_FIRST, WALLTIME_LAST and WALLTIME_NEXT_VALID.

也可以看看:

getTime

Added in API level 24
Date getTime ()

返回此日历的当前时间。

Returns
Date the current time.

getTimeInMillis

Added in API level 24
long getTimeInMillis ()

长时间返回此日历的当前时间。

Returns
long the current time as UTC milliseconds from the epoch.

getTimeZone

Added in API level 24
TimeZone getTimeZone ()

返回时区。

Returns
TimeZone the time zone object associated with this calendar.

getType

Added in API level 24
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

getWeekData

Added in API level 24
Calendar.WeekData getWeekData ()

[icu]返回简单的,不可变的类结构类来访问此日历中的周末数据。

Returns
Calendar.WeekData the WeekData for this calendar.

getWeekDataForRegion

Added in API level 24
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.

hashCode

Added in API level 24
int hashCode ()

返回此日历的哈希码。

Returns
int a hash code value for this object.

isEquivalentTo

Added in API level 24
boolean isEquivalentTo (Calendar other)

[icu]如果给定的Calendar对象与此对象相等,则返回true。 一个等效的日历将像这个一样运行,但它可能被设置为不同的时间。 相比之下,为了使equals()方法返回true,另一个日历必须设置为同一时间。

Parameters
other Calendar: the Calendar to be compared with this Calendar
Returns
boolean

isLenient

Added in API level 24
boolean isLenient ()

告诉日期/时间解释是否宽松。

Returns
boolean

isSet

Added in API level 24
boolean isSet (int field)

确定给定时间字段是否设置了值。

Parameters
field int
Returns
boolean true if the given time field has a value set; false otherwise.

isWeekend

Added in API level 24
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

也可以看看:

isWeekend

Added in API level 24
boolean isWeekend ()

[icu]如果此日历的当前日期和时间在该日历系统的周末,则返回true。

Returns
boolean true if the given date and time is part of the weekend

也可以看看:

roll

Added in API level 24
void roll (int field, 
                boolean up)

在给定字段上滚动(上/下)单个时间单位。 如果该字段超过其最大允许值,它将“换行”回到最小值并继续滚动。 例如,要将当前日期向上滚动一天,您可以调用:

roll(DATE, true)

YEAR字段上滚动时,它将在1和通过调用 getMaximumYEAR )返回的值之间的范围内滚动年份值。

在特定字段上滚动时,其他字段的值可能会发生冲突并需要更改。 例如,滚动时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日,这通常不是理想的结果。

注意:您应始终使用rolladd,而不是尝试直接在Calendar的字段上执行算术运算。 Calendar子类很有可能具有非线性行为的字段,例如在非闰年期间丢失了几个月或几天。 子类' addroll方法将考虑到这一点,而简单的算术操作可能会导致无效的结果。

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.

也可以看看:

roll

Added in API level 24
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实现能够滚动除了各个领域ERADST_OFFSET ,并ZONE_OFFSET 当然,子类可以增加对roll覆盖范围内的其他字段的支持。

注意:您应始终使用rolladd,而不是尝试直接在Calendar的字段上执行算术运算。 Calendar子类很可能具有非线性行为的字段,例如在非闰年期间缺少月份或日期。 子类“ addroll方法将考虑到这一点,而简单的算术操作可能会导致无效的结果。

子类:
roll这种实现假定字段的行为在其最小值和最大值之间是连续的,这通过调用getActualMinimumgetActualMaximum 对于大多数这样的领域,简单的加法,减法和模数操作足以执行滚动。 对于周相关领域, getFirstDayOfWeekgetMinimalDaysInFirstWeek的结果也是必要的。 如果子类的值与默认值不同,子类可以覆盖这两种方法。

具有导致连续性假设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.

也可以看看:

set

Added in API level 24
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.

set

Added in API level 24
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.

set

Added in API level 24
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.

set

Added in API level 24
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.

setFirstDayOfWeek

Added in API level 24
void setFirstDayOfWeek (int value)

设置一周中的第一天,其中1 = SUNDAY和7 = SATURDAY

Parameters
value int: the given first day of the week, where 1 = SUNDAY and 7 = SATURDAY.

setLenient

Added in API level 24
void setLenient (boolean lenient)

指定日期/时间解释是否宽松。 在宽松的解释下,“1996年2月942”的日期将被视为等同于1996年2月1日之后的第941天。严格的解释,这些日期将引发异常。

Parameters
lenient boolean

也可以看看:

setMinimalDaysInFirstWeek

Added in API level 24
void setMinimalDaysInFirstWeek (int value)

设置一年中第一周所需的最短日期。 例如,如果第一周被定义为包含一年的第一个月的第一天的那一周,则使用值1调用方法。如果它必须是整整一周,则使用值7。

Parameters
value int: the given minimal days required in the first week of the year.

setRepeatedWallTimeOption

Added in API level 24
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.

也可以看看:

setSkippedWallTimeOption

Added in API level 24
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.

也可以看看:

setTime

Added in API level 24
void setTime (Date date)

将此日历的当前时间设置为给定的日期。

注意:调用 setTimeDate(Long.MAX_VALUE)Date(Long.MIN_VALUE)可能会从 get(int)产生不正确的字段值。

Parameters
date Date: the given Date.

setTimeInMillis

Added in API level 24
void setTimeInMillis (long millis)

根据给定的长值设置此日历的当前时间。 在严格模式下,当millis超出Calendar对象允许的范围时,将引发IllegalIcuArgumentException异常。 当处于宽松模式时,超出范围值被固定到它们各自的最小/最大值。

Parameters
millis long: the new time in UTC milliseconds from the epoch.

setTimeZone

Added in API level 24
void setTimeZone (TimeZone value)

使用给定的时区值设置时区。

Parameters
value TimeZone: the given time zone.

setWeekData

Added in API level 24
Calendar setWeekData (Calendar.WeekData wdata)

[icu]根据WeekData输入设置此日历中的数据。

Parameters
wdata Calendar.WeekData: The week data to use
Returns
Calendar this, for chaining

toString

Added in API level 24
String toString ()

返回此日历的字符串表示形式。 此方法仅用于调试目的,并且返回的字符串格式可能因实现而异。 返回的字符串可能为空,但可能不是null

Returns
String a string representation of this calendar.

Protected methods

complete

Added in API level 24
void complete ()

填写时间字段列表中未设置的字段。

computeFields

Added in API level 24
void computeFields ()

当前毫秒时间值转换为time的字段值fields[] 这将时间字段值与为日历设置的新时间同步。 时间首先重新计算; 重新计算时间,然后在字段中调用complete方法。

也可以看看:

computeGregorianFields

Added in API level 24
void computeGregorianFields (int julianDay)

从Julian日计算公历的年,月和日。 这些值不存储在字段中,而是存储在成员变量gregorianXxx中。 它们用于时区计算,并用于格里高利导数的子类。 子类可能会调用此方法来执行公历日历 - >字段计算。 要执行公历日历字段 - >毫秒计算,请调用computeGregorianMonthStart()。

Parameters
julianDay int

也可以看看:

computeGregorianMonthStart

Added in API level 24
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

也可以看看:

computeJulianDay

Added in API level 24
int computeJulianDay ()

计算此日历字段指定的Julian日数。

Returns
int

computeMillisInDay

Added in API level 24
int computeMillisInDay ()

从字段计算当天的毫秒数。 这是一个从0到23:59:59.999(含)的值,除非字段超出范围,在这种情况下,它可以是任意值。 此值反映了本地防区墙的时间。

Returns
int

computeTime

Added in API level 24
void computeTime ()

fields[]的当前字段值转换为毫秒时间值 time

computeZoneOffset

Added in API level 24
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

fieldName

Added in API level 24
String fieldName (int field)

返回字段的字符串名称,用于调试和异常。

Parameters
field int
Returns
String

floorDivide

Added in API level 24
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.

floorDivide

Added in API level 24
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.

floorDivide

Added in API level 24
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.

floorDivide

Added in API level 24
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.

getFieldResolutionTable

Added in API level 24
int[][][] getFieldResolutionTable ()

返回此日历的字段分辨率数组。 定义附加字段或更改现有字段的语义的日历应该重写此方法以相应地调整字段解析语义。 其他子类不应该重写此方法。

Returns
int[][][]

也可以看看:

getGregorianDayOfMonth

Added in API level 24
int getGregorianDayOfMonth ()

根据 computeGregorianFields()计算的公历日期返回公历日期(从1开始)。

Returns
int

也可以看看:

getGregorianDayOfYear

Added in API level 24
int getGregorianDayOfYear ()

根据 computeGregorianFields()计算的公历日返回公历日(从1开始)。

Returns
int

也可以看看:

getGregorianMonth

Added in API level 24
int getGregorianMonth ()

按照 computeGregorianFields()计算结果返回公历上的月份(从0开始)。

Returns
int

也可以看看:

getGregorianYear

Added in API level 24
int getGregorianYear ()

按照 computeGregorianFields()计算的公历年返回公历日历。

Returns
int

也可以看看:

getLimit

Added in API level 24
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

也可以看看:

getStamp

Added in API level 24
int getStamp (int field)

返回一个字段的时间戳。

Parameters
field int
Returns
int

gregorianMonthLength

Added in API level 24
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

gregorianPreviousMonthLength

Added in API level 24
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

handleComputeFields

Added in API level 24
void handleComputeFields (int julianDay)

子类可以重写此方法来计算特定于每个日历系统的几个字段。 这些是:

  • ERA
  • YEAR
  • MONTH
  • DAY_OF_MONTH
  • DAY_OF_YEAR
  • EXTENDED_YEAR
Subclasses can refer to the DAY_OF_WEEK and DOW_LOCAL fields, which will be set when this method is called. Subclasses can also call the getGregorianXxx() methods to obtain Gregorian calendar equivalents for the given Julian day.

另外,子类应该计算任何子类特定的字段,即从BASE_FIELD_COUNT到getFieldCount() - 1的字段。

Calendar的默认实现实现了纯粹的格雷戈里历。

Parameters
julianDay int

handleComputeJulianDay

Added in API level 24
int handleComputeJulianDay (int bestField)

子类可以覆盖这个。 此方法调用handleGetMonthLength()以获取日历特定的月份长度。

Parameters
bestField int
Returns
int

handleComputeMonthStart

Added in API level 24
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

handleCreateFields

Added in API level 24
int[] handleCreateFields ()

使用超出Calendar定义的其他字段的子类应该重写此方法以返回具有适当长度的int[]数组。 长度必须至少为BASE_FIELD_COUNT且不得超过MAX_FIELD_COUNT

Returns
int[]

handleGetDateFormat

Added in API level 24
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

handleGetDateFormat

Added in API level 24
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

handleGetDateFormat

Added in API level 24
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

handleGetExtendedYear

Added in API level 24
int handleGetExtendedYear ()

返回当前字段定义的扩展年份。 这将使用EXTENDED_YEAR字段或特定于日历系统的YEAR和超年字段(如ERA),具体取决于哪一组字段较新。

Returns
int the extended year

handleGetLimit

Added in API level 24
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

handleGetMonthLength

Added in API level 24
int handleGetMonthLength (int extendedYear, 
                int month)

返回此日历系统给定扩展年的给定月份中的天数。 如果子类可以提供比日历中的默认实现更正确或更高效的实现,则子类应该重写此方法。

Parameters
extendedYear int
month int
Returns
int

handleGetYearLength

Added in API level 24
int handleGetYearLength (int eyear)

返回此日历系统的给定扩展年份中的天数。 如果子类可以提供比日历中的默认实现更正确或更高效的实现,则子类应该重写此方法。

Parameters
eyear int
Returns
int

internalGet

Added in API level 24
int internalGet (int field)

返回给定时间字段的值。 这是触发任何计算的子类的内部方法。

Parameters
field int: the given time field.
Returns
int the value for the given time field.

internalGet

Added in API level 24
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

internalGetTimeInMillis

Added in API level 24
long internalGetTimeInMillis ()

返回当前毫秒数而不重新计算。

Returns
long

internalSet

Added in API level 24
void internalSet (int field, 
                int value)

将一个字段设置为一个值。 计算字段时子类应使用此方法。 它将stamp[]数组中的时间戳设置为INTERNALLY_SET 如果传入一个不能由子类设置的字段,则引发IllegalArgumentException 这可以防止子类修改日历系统不变的字段。

Parameters
field int
value int

isGregorianLeapYear

Added in API level 24
boolean isGregorianLeapYear (int year)

确定给定年份是否为闰年。 如果给定的年份是闰年,则返回true。

Parameters
year int: the given year.
Returns
boolean true if the given year is a leap year; false otherwise.

julianDayToDayOfWeek

Added in API level 24
int julianDayToDayOfWeek (int julian)

给定Julian日,返回从星期日到星期六的星期几。

Parameters
julian int
Returns
int

julianDayToMillis

Added in API level 24
long julianDayToMillis (int julian)

每天将Julian转换为毫秒。

Parameters
julian int: the given Julian day number.
Returns
long time as milliseconds.

millisToJulianDay

Added in API level 24
int millisToJulianDay (long millis)

将时间转换为毫秒到Julian日。

Parameters
millis long: the given milliseconds.
Returns
int the Julian day number.

newerField

Added in API level 24
int newerField (int defaultField, 
                int alternateField)

返回更新的字段,即defaultField或alternateField。 如果既没有更新也没有设置,请返回defaultField。

Parameters
defaultField int
alternateField int
Returns
int

newestStamp

Added in API level 24
int newestStamp (int first, 
                int last, 
                int bestStampSoFar)

返回给定范围的字段的最新邮票。

Parameters
first int
last int
bestStampSoFar int
Returns
int

pinField

Added in API level 24
void pinField (int field)

调整指定的字段,使其在日历设置日期的允许范围内。 例如,在公历日历中,设置为4月31日的日历的DAY_OF_MONTH字段将导致它设置为4月30日。

子类:
此实用程序方法旨在供需要实现其自己的替代rolladd的子类使用。

注意: pinField是以getActualMinimumgetActualMaximum 如果其中任何一种方法对特定字段使用缓慢的迭代算法,则尝试为该字段调用pinField是不明智的。 如果你真的需要这样做,你应该重写这个方法来为该领域做一些更有效的工作。

Parameters
field int: The calendar field whose value should be pinned.

也可以看看:

prepareGetActual

Added in API level 24
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

resolveFields

Added in API level 24
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

validateField

Added in API level 24
void validateField (int field)

验证此日历的单个字段。 子类应该重写此方法来验证任何日历特定的字段。 泛型字段可以由Calendar.validateField()处理。

Parameters
field int

也可以看看:

validateField

Added in API level 24
void validateField (int field, 
                int min, 
                int max)

给定其最小和最大允许值,验证此日历的单个字段。 如果该字段超出范围,请输入描述性的IllegalArgumentException 子类可以在其实现validateField(int)使用此方法。

Parameters
field int
min int
max int

validateFields

Added in API level 24
void validateFields ()

通过在已设置的每个字段上调用validateField(int) ,确保每个字段在其有效范围内。 如果此日历不是宽松的,则只应调用此方法。

也可以看看:

weekNumber

Added in API level 24
int weekNumber (int desiredDay, 
                int dayOfPeriod, 
                int dayOfWeek)

返回一段时间内一天中的星期数。 这可能是一年中的星期数或一个月中的星期数。 通常这会是> = 1的值,但如果期间的某些起始日期从第一周排除,因为getMinimalDaysInFirstWeek > 1,那么这些起始日期的周数将为零。 此方法需要该日期中的某个已知日期的星期几和星期几,以便确定所需日期的星期几。

子类:
此方法旨在供子类在实现其方法computeTime和/或computeFields使用。 它在getActualMinimumgetActualMaximum中也很常用。

这个变体可以方便地计算一个星期几的某一天的某一天(通常是该期间的第一天或最后一天)的星期数,但不知道该星期几的某一天的星期几和星期几期间(例如当前日期) 已知的。

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.

weekNumber

Added in API level 24
int weekNumber (int dayOfPeriod, 
                int dayOfWeek)

返回一段时间内一天中的星期数。 这可能是一年中的星期数或一个月中的星期数。 通常这会是> = 1的值,但是如果期间的某些起始日期从第一周中排除,因为getMinimalDaysInFirstWeek > 1,那么在这些起始日期中,周数将为零。 此方法需要给定日期的星期几才能确定结果。

子类:
此方法旨在供子类在实现其方法computeTime和/或computeFields使用。 它在getActualMinimumgetActualMaximum中也经常有用。

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.

Hooray!