日历类中的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()
.time
和 fields
中的值在调用computeTime()
本身后将同步,对吗?还是我在这里错过了什么??
对于那些可能会问为什么它如此重要的人来说,这是因为在日历中重新计算时间的顺序通常会改变我们从getTime()
获得的时间(或者我已经读过(!!
它不是循环的。
假设您有一个Calendar
对象,其中设置了一些(但不是全部(字段。 此方法将 (a( 从设置的字段中计算并保存纪元 ( long time
(,然后 (b( 将所有未设置的字段设置为与刚刚计算的纪元一致。
因此,当该方法完成时,您将有一个Calendar
,其中所有字段都已填写并保持一致。 这是对象从您开始的位置不同的、更好的状态。
Quantum 非常正确......只是为了添加更多,你不能直接从可用字段中计算缺失字段的值,你必须经历计算时间值的过程,然后从该值中填充缺失字段。