0

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() );
4

0 に答える 0