我有一个使用 java.util.Calendar 对象的应用程序。我对日历对象进行了多次设置,并且还基于某些条件。但是,最后所有最后计算的日期/时间值看起来都不同。然后我发现调用 set 方法在调用 get 方法之前不会计算日历对象上的值。请参阅下面的 Javadocs
获取和设置日历字段值
可以通过调用 set 方法来设置日历字段值。在需要计算其时间值(距纪元的毫秒数)或日历字段的值之前,不会解释日历中设置的任何字段值。调用 get、getTimeInMillis、getTime、add 和 roll 涉及到这样的计算。
所以我的问题是 Calendar 对象上是否有任何模式可以在设置下一个值/常量之前调用 getter 之前设置值?
如果您删除 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() );