Calendar 类中的 complete()
方法执行以下操作:
protected void complete()
Fills in any unset fields in the calendar fields. First, the computeTime() method is called if the time value (millisecond offset from the Epoch) has not been calculated from calendar field values. Then, the computeFields() method is called to calculate all calendar field values.
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()
更新 fields
中的值。 time
和 fields
中的值将在调用 computeTime()
本身后同步,对吗?还是我在这里遗漏了什么??
对于那些可能会问为什么它如此重要的人来说,这是因为在 Calendar 中重新计算时间的顺序经常会改变我们从 getTime()
获得的时间(或者我有阅读)!!
最佳答案
它不是循环的。
假设您有一个 Calendar
对象,其中设置了一些(但不是全部)字段。此方法将 (a) 从 are 设置的字段中计算并保存纪元(long time
),然后 (b) 将所有未设置的字段设置为与它刚刚计算的纪元。
因此,当该方法完成时,您将拥有一个所有字段都已填写且一致的 Calendar
。这是与您开始时不同的、更好的对象状态。
关于java - java.util.Calendar 中的 complete() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10651595/