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

时间:2012-05-18 11:15:10

标签: java calendar language-design

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()更新字段中的值。在调用computeTime()本身后, time field 中的值将同步,对吧?或者我在这里错过了什么?

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

2 个答案:

答案 0 :(得分:1)

这不是循环的。

想象一下,你有一个Calendar对象,其中包含一些但不是全部的字段集。此方法将(a)从 设置的字段计算并保存时期(long time),然后(b)将所有未设置的字段设置为与刚刚计算的时间一致

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

答案 1 :(得分:1)

Quantum是非常正确的..只是为了添加更多,你不能直接计算可用字段中缺失字段的值,你必须经历计算时间值的过程,然后填写缺少的字段从那个价值来看。