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

0 ответов

Другие вопросы по тегам