java.util.Calendar オブジェクトを使用するアプリケーションがあります。カレンダーオブジェクトに複数のセットを行い、特定の条件にも基づいています。ただし、最後には、最後に計算された日付/時刻の値がすべて異なって表示されます。次に、set メソッドを呼び出しても、get メソッドを呼び出すまでカレンダー オブジェクトの値が計算されないことがわかりました。Javadocs の以下を参照してください
カレンダー フィールド値の取得と設定
カレンダー フィールドの値は、set メソッドを呼び出すことで設定できます。カレンダーに設定されたフィールド値は、時間値 (エポックからのミリ秒) またはカレンダー フィールドの値を計算する必要があるまで解釈されません。get、getTimeInMillis、getTime、add、および roll の呼び出しには、このような計算が含まれます。
だから私の質問は、次の値/定数を設定する前にゲッターを呼び出す前でも値を設定するモードが Calendar オブジェクトにあるかどうかです。
System.out ステートメントを削除すると、以下のコードの動作が異なります。
宣言 -> カレンダー computeTime、int skipCycle、int[] 日、int dayOfMonth、int weekOfMonth、int monthInYear、int hourToFire
computeTime.add( Calendar.YEAR, skipCycle );
computeTime.set( Calendar.MONTH, monthInYear );
System.out.println( "getcomputeTime:2 " + computeTime.getTime() );
computeTime.set( Calendar.DAY_OF_MONTH, 1 );
System.out.println( "getcomputeTime:3 " + computeTime.getTime() );
computeTime.set( Calendar.HOUR_OF_DAY, 00 );
System.out.println( "getcomputeTime:4 " + computeTime.getTime() );
computeTime.set( Calendar.MINUTE, 00 );
System.out.println( "getcomputeTime:5 " + computeTime.getTime() );
computeTime.set( Calendar.SECOND, 00 );
System.out.println( "getcomputeTime:6 " + computeTime.getTime() );
int maxValue = computeTime.getActualMaximum(Calendar.WEEK_OF_MONTH);
weekOfMonth = weekOfMonth < maxValue ? weekOfMonth : maxValue;
computeTime.set( Calendar.WEEK_OF_MONTH, weekOfMonth );
System.out.println( "getcomputeTime:7 " + computeTime.getTime() );
if( computeTime.get( Calendar.DAY_OF_WEEK ) > days[ 0 ] )
computeTime.set( Calendar.WEEK_OF_MONTH, weekOfMonth + 1 );
System.out.println( "getcomputeTime:8 " + computeTime.getTime() );
computeTime.set( Calendar.DAY_OF_WEEK, days[ 0 ] );
computeTime.add( Calendar.HOUR_OF_DAY, hourToFire );
System.out.println( "getcomputeTime:9 " + computeTime.getTime() );