4

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()ます。次に、 の値を使用して、 usingのtime値を更新します。との両方の値は、それ自体への呼び出し後に同期されますよね?? または私はここに何かが欠けていますか??fieldscomputeFields()timefieldscomputeTime()

なぜそんなに重要なのかと尋ねる人のために、カレンダーで時間が再計算される順序が、取得する時間を変更することが多いためですgetTime()(または、私が読んだことがあります)!!

4

2 に答える 2

1

円形ではありません。

Calendarすべてではありませんが、いくつかのフィールドが設定されたオブジェクトがあるとします。このメソッドはlong time、(a)設定されたフィールドからエポック()を計算して保存し、(b)計算されたばかりのエポックと一致するようにすべての未設定フィールドを設定します。

したがって、メソッドが完了するCalendarと、すべてのフィールドに入力され、一貫性のあるが表示されます。これは、開始した場所とは異なる、より良いオブジェクトの状態です。

于 2012-05-18T11:39:33.353 に答える
1

クォンタムは非常に正しい..もう少し追加するには、利用可能なフィールドから不足しているフィールドの値を直接計算することはできません.時間値を計算し、その値から不足しているフィールドを埋めるプロセスを経る必要があります. .

于 2012-05-18T11:48:38.260 に答える