java - java.util.Calendar 中的 complete() 方法

标签 java calendar language-design

Calendar 类中的 complete() 方法执行以下操作:

protected void complete()

Fills in any unset fields in the calendar fields. First, the computeTime() method is called if the time value (millisecond offset from the Epoch) has not been calculated from calendar field values. Then, the computeFields() method is called to calculate all calendar field values.

complete() 方法的代码如下:

protected void complete()
    {
        if (!isTimeSet)
        updateTime();
        if (!areFieldsSet || !areAllFieldsSet) {
            computeFields(); // fills in unset fields
            areAllFieldsSet = areFieldsSet = true;
        }
    }

我的问题是,这项循环工作的意义何在??第一个值来自

protected int[] fields

用于更新

的值
long time 

使用 computeTime() 方法。然后 time 的值用于使用 computeFields() 更新 fields 中的值。 timefields 中的值将在调用 computeTime() 本身后同步,对吗?还是我在这里遗漏了什么??

对于那些可能会问为什么它如此重要的人来说,这是因为在 Calendar 中重新计算时间的顺序经常会改变我们从 getTime() 获得的时间(或者我有阅读)!!

最佳答案

它不是循环的。

假设您有一个 Calendar 对象,其中设置了一些(但不是全部)字段。此方法将 (a) 从 are 设置的字段中计算并保存纪元(long time),然后 (b) 将所有未设置的字段设置为与它刚刚计算的纪元。

因此,当该方法完成时,您将拥有一个所有字段都已填写且一致的 Calendar。这是与您开始时不同的、更好的对象状态。

关于java - java.util.Calendar 中的 complete() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10651595/

相关文章:

php - 为什么 for block 会覆盖 PHP 和 Python 中的外部作用域?

c - 为什么 C 程序每次引用一个时都会说 'struct'?

python - 为什么 Python 列表实现为动态数组而不是环形缓冲区?

java - 无法连接到 PostgreSQL 数据库,错误代码 'localhost'

java - Java 中的 Project Euler #19(差 1)

android - 未配置 Google 日历 API 访问权限

ios - CVCalendar iOS 禁用日期在更改月份时不起作用

java - 使用 Spring JPA 保存新数据 - Angular 8

java - RestEasy 异步 Controller 正确使用

java - 如何将数字转换为特定字母?