Calendar类中的complete()方法执行以下操作:
protected void complete()填充日历字段中的任何未设置字段。首先,如果没有从日历字段值计算时间值(来自Epoch的毫秒偏移),则调用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()获得的时间(或者我已经读过了)!
发布于 2012-05-18 11:39:33
不是圆形的。
假设您有一个Calendar对象,其中设置了一些字段,但不是全部字段。该方法将(a)从所设置的字段中计算和保存历元(long time),然后(b)将所有未设置的字段设置为与它刚刚计算的历元一致。
因此,当该方法完成时,您将得到一个Calendar,其中所有字段都已填入并保持一致。这是一个不同的,更好的状态的对象,从哪里开始。
发布于 2012-05-18 11:48:38
量子是非常正确的。只是为了增加一些,你不能直接从可用的字段中计算缺失字段的值,你必须经过计算时间值的过程,然后从该值中填充缺失的字段。
https://stackoverflow.com/questions/10651595
复制相似问题