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



日历类中的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 的值来更新 fields 中的值 computeFields() .timefields 中的值在调用computeTime()本身后将同步,对吗?还是我在这里错过了什么??

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

它不是循环的。

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

因此,当该方法完成时,您将有一个Calendar,其中所有字段都已填写并保持一致。 这是对象从您开始的位置不同的、更好的状态。

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

最新更新