@Override public Date getRewindedDate( Date date, Integer rewindedPeriods ) { Calendar calendar = getCalendar(); date = date != null ? date : new Date(); rewindedPeriods = rewindedPeriods != null ? rewindedPeriods : 1; DateTimeUnit dateTimeUnit = createLocalDateUnitInstance( date ); dateTimeUnit = calendar.minusYears( dateTimeUnit, rewindedPeriods ); return calendar.toIso( dateTimeUnit ).toJdkDate(); } }
@Override public Date getRewindedDate( Date date, Integer rewindedPeriods ) { Calendar cal = getCalendar(); date = date != null ? date : new Date(); rewindedPeriods = rewindedPeriods != null ? rewindedPeriods : 1; DateTimeUnit dateTimeUnit = createLocalDateUnitInstance( date, cal ); dateTimeUnit = cal.minusYears( dateTimeUnit, rewindedPeriods ); return cal.toIso( dateTimeUnit ).toJdkDate(); } }
/** * Generates yearly periods for the last 5, current and next 5 years. */ @Override public List<Period> generatePeriods( DateTimeUnit dateTimeUnit ) { Calendar calendar = getCalendar(); dateTimeUnit = calendar.minusYears( dateTimeUnit, 5 ); dateTimeUnit.setDay( 1 ); dateTimeUnit.setMonth( 1 ); List<Period> periods = Lists.newArrayList(); for ( int i = 0; i < 11; ++i ) { periods.add( createPeriod( dateTimeUnit, calendar ) ); dateTimeUnit = calendar.plusYears( dateTimeUnit, 1 ); } return periods; }
/** * Generates a list of Periods for the last 5 years. Must be overridden by * CalendarPeriodTypes which do not generate periods for the current year * only in their implementation of generatePeriods( Date ). * * @param date the date which touches the time span to generate Periods for. * @return a list of Periods for a defined time span. */ public List<Period> generateLast5Years( Date date ) { DateTimeUnit dateTimeUnit = createLocalDateUnitInstance( date ); dateTimeUnit = getCalendar().minusYears( dateTimeUnit, 4 ); List<Period> periods = Lists.newArrayList(); Calendar calendar = getCalendar(); for ( int i = 0; i < 5; i++ ) { periods.addAll( generatePeriods( dateTimeUnit ) ); dateTimeUnit = calendar.plusYears( dateTimeUnit, 1 ); } return periods; }
/** * Generates the last 5 years where the last one is the year which the given * date is inside. */ @Override public List<Period> generateLast5Years( Date date ) { Calendar calendar = getCalendar(); DateTimeUnit dateTimeUnit = createLocalDateUnitInstance( date ); dateTimeUnit = calendar.minusYears( dateTimeUnit, 4 ); dateTimeUnit.setDay( 1 ); dateTimeUnit.setMonth( 1 ); List<Period> periods = Lists.newArrayList(); for ( int i = 0; i < 5; ++i ) { periods.add( createPeriod( dateTimeUnit, calendar ) ); dateTimeUnit = calendar.plusYears( dateTimeUnit, 1 ); } return periods; }
/** * Subtracts the given amount of time to the given calendar field. * * @param field the calendar field. * @param amount the amount of time. */ public Cal subtract( int field, int amount ) { switch ( field ) { case Calendar.YEAR: dateTimeUnit = getCalendar().minusYears( dateTimeUnit, amount ); case Calendar.MONTH: dateTimeUnit = getCalendar().minusMonths( dateTimeUnit, amount ); case Calendar.DAY_OF_MONTH: case Calendar.DAY_OF_YEAR: dateTimeUnit = getCalendar().minusDays( dateTimeUnit, amount ); break; default: throw new UnsupportedOperationException(); } return this; }
@Override public List<Period> generateLast5Years( Date date ) { Calendar cal = getCalendar(); DateTimeUnit dateTimeUnit = createLocalDateUnitInstance( date, cal ); boolean past = dateTimeUnit.getMonth() >= (getBaseMonth() + 1); List<Period> periods = Lists.newArrayList(); dateTimeUnit = cal.minusYears( dateTimeUnit, past ? 4 : 5 ); dateTimeUnit.setMonth( getBaseMonth() + 1 ); dateTimeUnit.setDay( 1 ); for ( int i = 0; i < 5; i++ ) { periods.add( createPeriod( dateTimeUnit, cal ) ); dateTimeUnit = cal.plusYears( dateTimeUnit, 1 ); } return periods; }
/** * Generates financial yearly periods for the last 5, current and next 5 * financial years. */ @Override public List<Period> generatePeriods( DateTimeUnit dateTimeUnit ) { Calendar cal = getCalendar(); boolean past = dateTimeUnit.getMonth() >= (getBaseMonth() + 1); List<Period> periods = Lists.newArrayList(); dateTimeUnit = cal.minusYears( dateTimeUnit, past ? 5 : 6 ); dateTimeUnit.setMonth( getBaseMonth() + 1 ); dateTimeUnit.setDay( 1 ); Calendar calendar = getCalendar(); for ( int i = 0; i < 11; i++ ) { periods.add( createPeriod( dateTimeUnit, cal ) ); dateTimeUnit = calendar.plusYears( dateTimeUnit, 1 ); } return periods; }
/** * Returns the start date of the year which occurred * {@code lastYears} ago. * * @param lastYears the number of years ago to base the * returned date. * @return the start date of the given year. */ public static Date getStartDate( Integer lastYears ) { Date earliest = null; if ( lastYears != null ) { Calendar calendar = PeriodType.getCalendar(); DateTimeUnit dateTimeUnit = calendar.today(); dateTimeUnit = calendar.minusYears( dateTimeUnit, lastYears - 1 ); dateTimeUnit.setMonth( 1 ); dateTimeUnit.setDay( 1 ); earliest = dateTimeUnit.toJdkDate(); } return earliest; }
@Override public Period createPeriod( DateTimeUnit dateTimeUnit, Calendar calendar ) { boolean past = dateTimeUnit.getMonth() >= (getBaseMonth() + 1); if ( !past ) { dateTimeUnit = calendar.minusYears( dateTimeUnit, 1 ); } dateTimeUnit.setMonth( getBaseMonth() + 1 ); dateTimeUnit.setDay( 1 ); DateTimeUnit start = new DateTimeUnit( dateTimeUnit ); DateTimeUnit end = new DateTimeUnit( dateTimeUnit ); end = calendar.plusYears( end, 1 ); end = calendar.minusDays( end, 1 ); return toIsoPeriod( start, end, calendar ); }