Java.util.Calendar中的complete()方法

4

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

protected void complete()

填充日历字段中未设置的任何字段。首先,如果从日历字段值没有计算出时间值(距离纪元的毫秒偏移量),则调用computeTime()方法。然后,调用computeFields()方法计算所有日历字段值。 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中的值。在调用computeTime()方法之后,timefields中的值将保持同步,对吗?或者我漏掉了什么重要的步骤吗?
对于那些可能会问为什么这么重要的人,因为在日历中重新计算时间的顺序经常会改变我们从getTime()中获取的时间(或者这就是我读到的)。

complete() 方法具有以下代码 - 请注意,它取决于实现! - jFrenetic
2个回答

1

它不是循环的。

想象一下,您有一个日历对象,其中某些字段已设置,但不是全部。此方法将(a)从已设置的字段计算并保存时期(long time),然后(b)设置所有未设置的字段以与刚刚计算的时期一致。

因此,当该方法完成时,您将拥有一个填充并一致的所有字段的日历。这是比起开始时更好的对象状态。


1

Quantum说得非常正确,只是再补充一些,你不能直接从可用字段计算缺失字段的值,必须通过计算时间值并从该值填充缺失字段的过程。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接