Java-объект календаря дата и время интерпретация?
У меня есть приложение, которое использует объект java.util.Calendar. Я делаю множественный набор на объекте календаря, а также на основе определенных условий. Однако в конце всего последнего вычисленное значение даты / времени выглядит иначе. Затем я понял, что вызов метода set не вычисляет значения объекта календаря, пока вы не вызовете методы get. Смотрите ниже из Javadocs
Получение и установка значений полей календаря
Значения полей календаря можно установить, вызвав методы set. Любые значения полей, установленные в Календаре, не будут интерпретироваться до тех пор, пока ему не понадобится рассчитать значение времени (в миллисекундах с начала эпохи) или значения полей календаря. Вызов get, getTimeInMillis, getTime, add and roll включает в себя такие вычисления.
Поэтому у меня вопрос: есть ли какой-либо режим в объекте Calendar, который устанавливает значение еще до вызова метода get перед установкой следующего значения / константы?
Приведенный ниже код работает иначе, если вы удаляете операторы System.out.
Объявление -> Календарь computeTime, int skipCycle, int[] days, 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() );