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()获得的时间(或者我已经读过)!!
答案 0 :(得分:1)
这不是循环的。
想象一下,你有一个Calendar
对象,其中包含一些但不是全部的字段集。此方法将(a)从 设置的字段计算并保存时期(long time
),然后(b)将所有未设置的字段设置为与刚刚计算的时间一致
因此,当方法完成时,您将拥有一个Calendar
,其中所有字段都已填写且一致。这是与你开始的对象不同,更好的状态。
答案 1 :(得分:1)
Quantum是非常正确的..只是为了添加更多,你不能直接计算可用字段中缺失字段的值,你必须经历计算时间值的过程,然后填写缺少的字段从那个价值来看。