鸿蒙OS开发文档 第47页

鸿蒙OS Formatter

Formatter java.lang.Object |—java.util.Formatter public final class Formatter extends Object implements Closeable, Flushable printf 样式格式字符串的解释器。 此类提供对布局对齐和对齐、数字、字符串和日期/时间数据的通用格式以及特定于语言环境的输出的支持。 支持常见的 Java 类型,例如 byte、BigDecimal 和 Calendar。 通过 Formattable 接口为任意用户类型提供有限的格式定制。 格式化程序对于多线程访问不一定是安全的。 线程安全是可选的,并且是此类中方法的用户的责任。 Java 语言的格式化打印很大程度上受到 C 的 printf 的启发。 尽管格式字符串与 C 相似,但已进行了一些定制以适应 Java 语言并利用其某些特性。 此外,Java 格式比 C 更严格; 例如,如果转换与标志不兼容,则会引发异常。 在 C 中,不适用的标志会被默默地忽略。 因此,格式字符串旨在为 C 程序员识别,但不一定与 C 中的格式字符串完全兼容。 预期用法示例: StringBuilder sb = new StringBuilder(); // Send all output to the Appendable object sb Formatter formatter = new Formatter(sb, Locale.US); // Explicit argument indices may be used to re-order output. formatter.format("%4$2s %3$2s %2$2s %1$2s", "a", "b", "c", "d") // -> " d c b a" // Optional locale as the first argument can be used to get // locale-specific formatting of numbers. The precision and width can be //...

鸿蒙OS FormattableFlags

FormattableFlags java.lang.Object |—java.util.FormattableFlags public class FormattableFlags extends Object FomattableFlags 被传递给 Formattable#formatTo 方法并修改 Formattable 的输出格式。 Formattable 的实现负责解释和验证任何标志。 字段摘要 修饰符和类型 字段 描述 static int ALTERNATE 要求输出使用替代形式。 static int LEFT_JUSTIFY 左对齐输出。 static int UPPERCASE 根据在创建 Formattable#formatTo 方法的格式化程序参数期间给出的语言环境规则将输出转换为大写。 方法总结 从类 java.lang.Object 继承的方法 clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait 字段详细信息 ALTERNATE public static final int ALTERNATE 要求输出使用替代形式。 表单的定义由 Formattable 指定。 此标志对应于格式说明符中的 ‘#’ (‘\u0023’)。 LEFT_JUSTIFY public static final int LEFT_JUSTIFY 左对齐输出。 空格 (‘\u0020’) 将根据需要添加到转换值的末尾以填充字段的最小宽度。 如果未设置此标志,则输出将右对齐。 此标志对应于格式说明符中的 ‘-‘ (‘\u002d’)。 UPPERCASE public static final int UPPERCASE 根据在创建 Formattable#formatTo 方法的格式化程序参数期间给出的语言环境规则将输出转换为大写。 输出应该等同于以下调用 String#toUpperCase(java.util.Locale) out.toUpperCase() 此标志对应于格式说明符中的 ‘S’ (‘\u0053’)。

鸿蒙OS EventObject

EventObject java.lang.Object |—java.util.EventObject public class EventObject extends Object implements Serializable 派生所有事件状态对象的根类。 所有事件都是通过对对象“源”的引用来构建的,“源”在逻辑上被认为是所讨论事件最初发生在其上的对象。 字段摘要 修饰符和类型 字段 描述 protected Object source 最初发生事件的对象。 构造函数摘要 构造函数 描述 EventObject(Object source) 构造一个原型事件。 方法总结 修饰符和类型 方法 描述 Object getSource() 最初发生事件的对象。 String toString() 返回此 EventObject 的字符串表示形式。 从类 java.lang.Object 继承的方法 clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait 字段详细信息 source protected transient Object source 最初发生事件的对象。 构造函数详细信息 EventObject public EventObject(Object source) 构造一个原型事件。 参数: 参数名称 参数描述 source 最初发生事件的对象。 Throws: Throw名称 Throw描述 IllegalArgumentException 如果 source 为空 方法详情 getSource public Object getSource() 最初发生事件的对象。 返回: 最初发生事件的对象。 toString public String toString() 返回此 EventObject 的字符串表示形式。 覆盖: 类 Object 中的 toString 返回: 此 EventObject 的字符串表示形式。

鸿蒙OS EventListenerProxy

EventListenerProxy java.lang.Object |—java.util.EventListenerProxy<T& public abstract class EventListenerProxy<T extends EventListener> extends Object implements EventListener EventListener 类的抽象包装类,它将一组附加参数与侦听器相关联。 子类必须为附加参数或参数提供存储和访问器方法。 例如,支持命名属性的 bean 将具有两个参数方法签名,用于为属性添加 PropertyChangeListener: public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) 如果 bean 还实现了零参数获取监听器方法: public PropertyChangeListener[] getPropertyChangeListeners() 那么数组可能包含内部的 PropertyChangeListeners,它们也是 PropertyChangeListenerProxy 对象。 如果调用方法对检索命名属性感兴趣,那么它必须测试元素以查看它是否是代理类。 构造函数摘要 构造函数 描述 EventListenerProxy(T listener) 为指定的侦听器创建代理。 方法总结 修饰符和类型 方法 描述 T getListener() 返回与代理关联的侦听器。 从类 java.lang.Object 继承的方法 clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait 构造函数详细信息 EventListenerProxy public EventListenerProxy(T listener) 为指定的侦听器创建代理。 参数: 参数名称 参数描述 listener 监听器对象 方法详情 getListener public T getListener() 返回与代理关联的侦听器。 返回: 与代理关联的侦听器

鸿蒙OS EnumSet

EnumSet java.lang.Object |—java.util.AbstractCollection<E& |—|—java.util.AbstractSet<E& |—|—|—java.util.EnumSet<E& public abstract class EnumSet<E extends Enum<E>> extends AbstractSet<E> implements Cloneable, Serializable 用于枚举类型的专用 Set 实现。枚举集合中的所有元素都必须来自一个枚举类型,该枚举类型在创建集合时显式或隐式指定。枚举集在内部表示为位向量。这种表示非常紧凑和高效。这个类的空间和时间性能应该足够好,以允许它用作传统的基于 int 的“位标志”的高质量、类型安全的替代品。如果参数也是枚举集,即使批量操作(例如 containsAll 和 retainAll)也应该运行得非常快。 iterator 方法返回的迭代器以元素的自然顺序(声明枚举常量的顺序)遍历元素。返回的迭代器是弱一致的:它永远不会抛出 ConcurrentModificationException 并且它可能会或可能不会显示迭代正在进行时对集合进行的任何修改的影响。 不允许空元素。尝试插入空元素将引发 NullPointerException。但是,尝试测试是否存在空元素或删除空元素将正常运行。 像大多数集合实现一样,EnumSet 是不同步的。如果多个线程同时访问一个枚举集,并且至少有一个线程修改了该集,则它应该在外部同步。这通常是通过同步一些自然封装枚举集的对象来完成的。如果不存在这样的对象,则应使用 Collections#synchronizedSet 方法“包装”该集合。这最好在创建时完成,以防止意外的不同步访问: Set<MyEnum> s = Collections.synchronizedSet(EnumSet.noneOf(MyEnum.class)); 实施说明:所有基本操作都在恒定时间内执行。 它们很可能(尽管不能保证)比它们的 HashSet 对应物快得多。 如果参数也是枚举集,即使批量操作也会在恒定时间内执行。 此类是 Java 集合框架的成员。 方法总结 修饰符和类型 方法 描述 static <E extends Enum<E>>EnumSet<E> allOf(Class<E> elementType) 创建一个枚举集,其中包含指定元素类型中的所有元素。 EnumSetE clone() 返回此集合的副本。 static <E extends Enum<E>>EnumSet<E> complementOf(EnumSet<E> s) 创建一个与指定枚举集具有相同元素类型的枚举集,最初包含该类型的所有未包含在指定集中的元素。 static <E extends Enum<E>>EnumSet<E> copyOf(Collection<E> c) 创建从指定集合初始化的枚举集。 static <E extends Enum<E>>EnumSet<E> copyOf(EnumSet<E> s) 创建一个与指定枚举集具有相同元素类型的枚举集,最初包含相同的元素(如果有)。 static <E extends Enum<E>>EnumSet<E> noneOf(Class<E> elementType) 创建具有指定元素类型的空枚举集。 static <E extends Enum<E>>EnumSet<E> of(E e) 创建一个最初包含指定元素的枚举集。 static <E extends Enum<E>>EnumSet<E> of(E e1, E e2) 创建一个最初包含指定元素的枚举集。 static <E extends Enum<E>>EnumSet<E> of(E first, E… rest) 创建一个最初包含指定元素的枚举集。 static <E extends Enum<E>>EnumSet<E> of(E e1, E e2, E e3) 创建一个最初包含指定元素的枚举集。 static <E extends Enum<E>>EnumSet<E> of(E e1, E e2, E e3, E e4) 创建一个最初包含指定元素的枚举集。 static <E extends Enum<E>>EnumSet<E> of(E e1, E e2, E e3, E e4, E e5) 创建一个最初包含指定元素的枚举集。 static <E extends Enum<E>>EnumSet<E> range(E from, E to) 创建一个枚举集,最初包含由两个指定端点定义的范围内的所有元素。 从类 java.util.AbstractCollection 继承的方法 add, addAll, clear, contains, containsAll, isEmpty, iterator, remove, retainAll, size, toArray, toArray, toString 从类 java.util.AbstractSet 继承的方法 equals, hashCode, removeAll 从接口 java.util.Collection 继承的方法 parallelStream, removeIf, stream 从接口 java.lang.Iterable 继承的方法 forEach 从类 java.lang.Object 继承的方法 finalize, getClass, notify, notifyAll, wait, wait, wait 从接口 java.util.Set 继承的方法 add, addAll, clear, contains, containsAll, isEmpty, iterator, remove, retainAll, size, spliterator, toArray, toArray 方法详情 noneOf public static <E extends Enum<E>>...

鸿蒙OS Date

Date java.lang.Object |—java.util.Date public class Date extends Object implements Serializable, Cloneable, Comparable<Date> Date 类表示特定的时间瞬间,精度为毫秒。 在 JDK 1.1 之前,Date 类有两个附加功能。 它允许将日期解释为年、月、日、小时、分钟和秒值。 它还允许格式化和解析日期字符串。 不幸的是,这些函数的 API 不适合国际化。 从 JDK 1.1 开始,应使用 Calendar 类在日期和时间字段之间进行转换,并且应使用 DateFormat 类来格式化和解析日期字符串。 Date 中的相应方法已弃用。 尽管 Date 类旨在反映协调世界时 (UTC),但它可能并不完全如此,这取决于 Java 虚拟机的主机环境。 几乎所有现代操作系统都假定在所有情况下 1 天 = 24 × 60 × 60 = 86400 秒。 然而,在 UTC 中,大约每隔一两年就会多出一秒,称为“闰秒”。 闰秒总是作为一天的最后一秒添加,并且总是在 12 月 31 日或 6 月 30 日。例如,由于添加了闰秒,1995 年的最后一分钟是 61 秒。 大多数计算机时钟不够准确,无法反映闰秒的区别。 一些计算机标准是根据格林威治标准时间 (GMT) 定义的,它等同于世界时间 (UT)。 GMT 是标准的“民用”名称; UT 是同一标准的“科学”名称。 UTC 和 UT 之间的区别在于,UTC 是基于原子钟,而 UT 是基于天文观测,对于所有实际目的来说,它是一根看不见的细毛。 由于地球自转不均匀(它以复杂的方式减速和加速),UT 并不总是均匀流动。 根据需要在 UTC 中引入闰秒,以使 UTC 保持在 UT1 的 0.9 秒以内,UT1 是应用了某些更正的 UT 版本。 还有其他时间和日期系统; 例如,基于卫星的全球定位系统 (GPS) 使用的时标与 UTC 同步,但未针对闰秒进行调整。 进一步信息的一个有趣来源是美国海军天文台,特别是时间理事会,位于: http://tycho.usno.navy.mil 以及他们对“时间系统”的定义: http://tycho.usno.navy.mil/systime.html 在接受或返回年、月、日、小时、分钟和秒值的 Date 类的所有方法中,使用以下表示: 年份 y 由整数 y – 1900 表示。 一个月用 0 到...

鸿蒙OS Currency

Currency java.lang.Object |—java.util.Currency public final class Currency extends Object implements Serializable 代表一种货币。 货币由其 ISO 4217 货币代码标识。 该类的设计使得任何给定货币的 Currency 实例都不会超过一个。 因此,没有公共构造函数。 您可以使用 getInstance 方法获取 Currency 实例。 用户可以通过系统属性 java.util.currency.data 取代 Java 运行时货币数据。如果定义了此系统属性,则其值为属性文件的位置,其内容分别是 ISO 3166 国家代码和 ISO 4217 货币数据的键/值对。价值部分由货币的三个 ISO 4217 值组成,即字母代码、数字代码和次要单位。这三个 ISO 4217 值用逗号分隔。以’#’ 开头的行被视为注释行。如果用户需要指定一个转换日期来指示新数据何时生效,则可以为每个货币条目指定一个可选的 UTC 时间戳。时间戳附加到货币属性的末尾,并使用逗号作为分隔符。如果 UTC 日期戳存在且有效,则 JRE 将仅在当前 UTC 日期晚于类加载时指定的日期时使用新的货币属性。时间戳的格式必须是 ISO 8601 格式:’yyyy-MM-dd’T’HH:mm:ss’。例如, 示例货币属性 JP=JPZ,999,0 将取代日本的货币数据。 转换日期JP=JPZ,999,0,2014-01-01T00:00:00 的示例货币属性 如果在 2014 年 1 月 1 日 00:00:00 GMT 之后加载 Currency 类,将取代日本的货币数据。 如果遇到语法格式错误的条目,则忽略该条目并处理文件中的其余条目。 对于存在重复国家代码条目的情况,该货币的货币信息的行为是未定义的,并且文件中的其余条目将被处理。 方法总结 修饰符和类型 方法 描述 static SetCurrency getAvailableCurrencies() 获取可用货币的集合。 String getCurrencyCode() 获取此货币的 ISO 4217 货币代码。 int getDefaultFractionDigits() 获取与此货币一起使用的默认小数位数。 String getDisplayName() 获取适合在默认 Locale.Category#DISPLAY 语言环境中显示此货币的名称。 String getDisplayName(Locale locale) 获取适合在指定区域显示此货币的名称。 static Currency getInstance(String currencyCode) 返回给定货币代码的 Currency 实例。 static Currency getInstance(Locale locale) 返回给定语言环境所在国家/地区的 Currency 实例。 int getNumericCode() 返回此货币的 ISO 4217 数字代码。 String getSymbol() 获取默认 Locale.Category#DISPLAY 语言环境的该货币的符号。 String getSymbol(Locale locale) 获取指定区域设置的此货币的符号。 String toString() 返回此货币的 ISO 4217 货币代码。 从类 java.lang.Object 继承的方法 clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait 方法详情 getInstance public static Currency getInstance(String...

鸿蒙OS Collections

Collections java.lang.Object |—java.util.Collections public class Collections extends Object 此类仅由对集合进行操作或返回集合的静态方法组成。 它包含对集合进行操作的多态算法,“包装器”,它返回由指定集合支持的新集合,以及其他一些零碎的东西。 如果提供给它们的集合或类对象为空,则此类的方法都会抛出 NullPointerException。 此类中包含的多态算法的文档通常包括对实现的简要描述。此类描述应被视为实现说明,而不是规范的一部分。只要遵守规范本身,实现者应该可以随意替换其他算法。 (例如,sort 使用的算法不必是归并排序,但它必须是稳定的。) 此类中包含的“破坏性”算法,即修改它们操作的集合的算法,被指定为在集合不支持适当的突变原语(例如 set 方法)时抛出 UnsupportedOperationException。如果调用对集合没有影响,这些算法可能会(但不是必须)抛出此异常。例如,在已排序的不可修改列表上调用 sort 方法可能会也可能不会抛出 UnsupportedOperationException。 此类是 Java 集合框架的成员。 字段摘要 修饰符和类型 字段 描述 static List EMPTY_LIST 空列表(不可变)。 static Map EMPTY_MAP 空map(不可变)。 static Set EMPTY_SET 空集(不可变)。 方法总结 修饰符和类型 方法 描述 static <T> boolean addAll(Collection<? super T> c, T… elements) 将所有指定元素添加到指定集合。 static <T> Queue<T> asLifoQueue(Deque<T> deque) 将 Deque 的视图返回为后进先出 (Lifo) 队列。 static <T> int binarySearch(List<? extends Comparable<? super T>> list, T key) 使用二分搜索算法在指定列表中搜索指定对象。 static <T> int binarySearch(List<? extends T> list, T key, Comparator<? super T> c) 使用二分搜索算法在指定列表中搜索指定对象。 static <E> Collection<E> checkedCollection(Collection<E> c, Class<E> type) 返回指定集合的动态类型安全视图。 static <E> List<E> checkedList(List<E> list, Class<E> type) 返回指定列表的动态类型安全视图。 static <K,V> Map<K,V> checkedMap(Map<K,V> m, Class<K> keyType, Class<V> valueType) 返回指定映射的动态类型安全视图。 static <K,V> NavigableMap<K,V> checkedNavigableMap(NavigableMap<K,V> m, Class<K> keyType, Class<V> valueType) 返回指定可导航地图的动态类型安全视图。 static <E> NavigableSet<E> checkedNavigableSet(NavigableSet<E> s, Class<E> type) 返回指定导航集的动态类型安全视图。 static <E> Queue<E> checkedQueue(Queue<E> queue, Class<E> type) 返回指定队列的动态类型安全视图。 static <E> Set<E> checkedSet(Set<E> s, Class<E> type) 返回指定集合的动态类型安全视图。 static <K,V> SortedMap<K,V> checkedSortedMap(SortedMap<K,V> m, Class<K> keyType, Class<V> valueType) 返回指定排序映射的动态类型安全视图。 static <E> SortedSet<E> checkedSortedSet(SortedSet<E> s, Class<E> type) 返回指定排序集的动态类型安全视图。 static <T> void copy(List<? super T> dest, List<? extends T> src) 将一个列表中的所有元素复制到另一个列表中。 static boolean disjoint(Collection<?> c1, Collection<?> c2) 如果两个指定的集合没有共同的元素,则返回 true。 static <T> Enumeration<T> emptyEnumeration() 返回一个没有元素的枚举。 static <T> Iterator<T> emptyIterator() 返回一个没有元素的迭代器。 static <T> List<T> emptyList() 返回一个空列表(不可变)。 static <T> ListIterator<T> emptyListIterator() 返回一个没有元素的列表迭代器。 static <K,V> Map<K,V> emptyMap() 返回一个空映射(不可变)。 static <K,V> NavigableMap<K,V> emptyNavigableMap() 返回一个空的可导航map(不可变)。 static <E> NavigableSet<E> emptyNavigableSet() 返回一个空的可导航集(不可变)。 static <T> Set<T> emptySet() 返回一个空集(不可变)。 static <K,V> SortedMap<K,V> emptySortedMap() 返回一个空的排序映射(不可变)。 static <E> SortedSet<E> emptySortedSet() 返回一个空的排序集(不可变)。 static <T> Enumeration<T> enumeration(Collection<T> c) 返回指定集合的枚举。...

鸿蒙OS Calendar.Builder

Calendar.Builder java.lang.Object |—java.util.Calendar.Builder public static class Calendar.Builder extends Object Calendar.Builder 用于从各种日期时间参数创建日历。 有两种方法可以将日历设置为日期时间值。一种是将 Instant 参数设置为距 Epoch 的毫秒偏移量。另一种是将单个字段参数(例如 Calendar#YEAR)设置为所需的值。这两种方式不能混用。尝试同时设置即时字段和单个字段将导致抛出 IllegalStateException。但是,允许覆盖即时或字段参数的先前值。 如果没有为确定日期和/或时间提供足够的字段参数,则在构建日历时使用日历特定的默认值。例如,如果没有为公历指定 Calendar#YEAR 值,则将使用 1970。如果字段参数之间存在任何冲突,则应用解析规则。因此,字段设置的顺序很重要。 除了日期时间参数外,还可以设置语言环境、时区、星期定义和宽大模式参数。 例子 以下是示例用法。示例代码假定日历常量是静态导入的。 以下代码生成日期为 2012-12-31(公历)的日历,因为星期一是具有 ISO 8601 兼容周参数的一周的第一天。 Calendar cal = new Calendar.Builder().setCalendarType("iso8601") .setWeekDate(2013, 1, MONDAY).build(); 以下代码生成日期为 1989-01-08(公历)的日本日历,假设默认 Calendar#ERA 是当天开始的平成。 Calendar cal = new Calendar.Builder().setCalendarType("japanese") .setFields(YEAR, 1, DAY_OF_YEAR, 1).build(); 构造函数摘要 构造函数 描述 Builder() 构造一个 Calendar.Builder。 方法总结 修饰符和类型 方法 描述 Calendar build() 返回由 setter 方法设置的参数构建的 Calendar。 Calendar.Builder set(int field, int value) 将字段参数设置为给定值。 Calendar.Builder setCalendarType(String type) 将日历类型参数设置为给定类型。 Calendar.Builder setDate(int year, int month, int dayOfMonth) 将日期字段参数设置为由 year、month 和 dayOfMonth 给出的值。 Calendar.Builder setFields(int… fieldValuePairs) 将字段参数设置为由 fieldValuePairs 给定的值,它们是字段及其值的对。 Calendar.Builder setInstant(long instant) 将 Instant 参数设置为给定的瞬时值,该值是从 Epoch 的毫秒偏移量。 Calendar.Builder setInstant(Date instant) 将 Instant 参数设置为由 Date 给出的瞬时值。 Calendar.Builder setLenient(boolean lenient) 将 lenient 模式参数设置为 lenient 给出的值。 Calendar.Builder setLocale(Locale locale) 将语言环境参数设置为给定的语言环境。 Calendar.Builder setTimeOfDay(int hourOfDay, int minute, int second) 将时间字段参数设置为由 hourOfDay、minute 和 second 给出的值。 Calendar.Builder setTimeOfDay(int hourOfDay, int minute, int second, int millis) 将时间字段参数设置为由 hourOfDay、minute、second 和 millis 给出的值。 Calendar.Builder setTimeZone(TimeZone zone) 将时区参数设置为给定的区域。 Calendar.Builder setWeekDate(int weekYear, int weekOfYear, int dayOfWeek) 将基于周的日期参数设置为具有给定日期说明符的值 – 周年、年周和周日。 Calendar.Builder setWeekDefinition(int firstDayOfWeek, int minimalDaysInFirstWeek) 将周定义参数设置为 firstDayOfWeek 和 minimumDaysInFirstWeek 给出的值,用于确定一年中的第一周。 从类 java.lang.Object 继承的方法 clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait 构造函数详细信息 Builder public Builder() 构造一个 Calendar.Builder。 方法详情 setInstant public Calendar.Builder setInstant(long instant) 将 Instant...

鸿蒙OS Calendar

Calendar java.lang.Object |—java.util.Calendar public abstract class Calendar extends Object implements Serializable, Cloneable, Comparable<Calendar> Calendar 类是一个抽象类,它提供了在特定时刻和一组日历字段(例如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等)之间进行转换的方法,以及用于操作日历字段(例如获取日期)的方法 下周的。 时间的瞬间可以用毫秒值表示,该值是从 1970 年 1 月 1 日 00:00:00.000 GMT(格里高利)纪元的偏移量。 该类还提供了用于在包外实现具体日历系统的附加字段和方法。 这些字段和方法被定义为受保护的。 与其他对语言环境敏感的类一样,Calendar 提供了一个类方法 getInstance,用于获取这种类型的普遍有用的对象。 Calendar 的 getInstance 方法返回一个 Calendar 对象,其日历字段已用当前日期和时间初始化: Calendar rightNow = Calendar.getInstance(); Calendar 对象可以生成实现特定语言和日历样式的日期时间格式所需的所有日历字段值(例如,Japanese-Gregorian、Japanese-Traditional)。 日历定义了某些日历字段返回的值的范围,以及它们的含义。 例如,日历系统的第一个月对于所有日历都有值 MONTH == JANUARY。 其他值由具体子类定义,例如 ERA。 获取和设置日历字段值 可以通过调用 set 方法来设置日历字段值。 在需要计算其时间值(距纪元的毫秒数)或日历字段的值之前,不会解释日历中设置的任何字段值。 调用 get、getTimeInMillis、getTime、add 和 roll 涉及到这样的计算。 Leniency Calendar 有两种解释日历字段的模式,宽松和非宽松。当日历处于宽松模式时,它接受的日历字段值范围比它产生的范围更广。当 Calendar 重新计算日历字段值以通过 get() 返回时,所有日历字段都被规范化。例如,宽松的 GregorianCalendar 将 MONTH == JANUARY, DAY_OF_MONTH == 32 解释为 2 月 1 日。 当日历处于非宽松模式时,如果其日历字段中存在任何不一致,它将引发异常。例如,GregorianCalendar 总是产生介于 1 和月份长度之间的 DAY_OF_MONTH 值。如果设置了任何超出范围的字段值,非宽松的 GregorianCalendar 在计算其时间或日历字段值时会引发异常。 第一周日历使用两个参数定义特定于语言环境的一周七天:一周的第一天和第一周的最少天数(从 1 到 7)。这些数字是在构造日历时从语言环境资源数据中获取的。它们也可以通过设置它们的值的方法明确指定。 在设置或获取 WEEK_OF_MONTH 或 WEEK_OF_YEAR 字段时,Calendar 必须确定月份或年份的第一周作为参考点。一个月或一年的第一周定义为从 getFirstDayOfWeek() 开始并至少包含该月或该年的 getMinimalDaysInFirstWeek() 天的最早 7 天时间段。周数 …, -1, 0 在第一周之前;第 2 周、第 3 周、… 跟随它。请注意,get() 返回的标准化编号可能不同。例如,一个特定的日历子类可以将一年中第 1 周的前一周指定为上一年的第 n 周。 日历字段解析...