public DateTimeUnit adjustToStartOfWeek( DateTimeUnit dateTimeUnit, Calendar calendar ) { int weekday = calendar.weekday( dateTimeUnit ); if ( weekday > startOfWeek ) { dateTimeUnit = calendar.minusDays( dateTimeUnit, weekday - startOfWeek ); } else if ( weekday < startOfWeek ) { dateTimeUnit = calendar.minusDays( dateTimeUnit, weekday + (frequencyOrder - startOfWeek) ); } return dateTimeUnit; } }
public DateTimeUnit adjustToStartOfBiWeek( DateTimeUnit dateTimeUnit, Calendar calendar ) { int biWeekday = calendar.weekday( dateTimeUnit ) + ( 1 - ( calendar.week( dateTimeUnit ) % 2 ) ) * 7; if ( biWeekday > startOfWeek ) { dateTimeUnit = calendar.minusDays( dateTimeUnit, biWeekday - startOfWeek ); } else if ( biWeekday < startOfWeek ) { dateTimeUnit = calendar.minusDays( dateTimeUnit, biWeekday + (frequencyOrder - startOfWeek) ); } return dateTimeUnit; } }
/** * Generates the last 52 weeks where the last one is the week which the * given date is inside. */ @Override public List<Period> generateRollingPeriods( DateTimeUnit end, Calendar calendar ) { List<Period> periods = Lists.newArrayList(); DateTimeUnit iterationDateTimeUnit = adjustToStartOfWeek( end, calendar ); iterationDateTimeUnit = calendar.minusDays( iterationDateTimeUnit, 357 ); for ( int i = 0; i < 52; i++ ) { periods.add( createPeriod( iterationDateTimeUnit, calendar ) ); iterationDateTimeUnit = calendar.plusWeeks( iterationDateTimeUnit, 1 ); } return periods; }
/** * Generates the last 365 days where the last one is the day of the given * date. */ @Override public List<Period> generateRollingPeriods( DateTimeUnit dateTimeUnit, Calendar calendar ) { Calendar cal = getCalendar(); DateTimeUnit iterationDateTimeUnit = cal.minusDays( dateTimeUnit, 364 ); List<Period> periods = Lists.newArrayList(); for ( int i = 0; i < 365; i++ ) { periods.add( createPeriod( iterationDateTimeUnit, calendar ) ); iterationDateTimeUnit = cal.plusDays( iterationDateTimeUnit, 1 ); } return periods; }
/** * Generates the last 26 bi-weeks where the last one is the week which the * given date is inside. */ @Override public List<Period> generateRollingPeriods( DateTimeUnit end, Calendar calendar ) { List<Period> periods = Lists.newArrayList(); DateTimeUnit date = adjustToStartOfBiWeek( end, calendar ); date = calendar.minusDays( date, 350 ); for ( int i = 0; i < 26; i++ ) { periods.add( createPeriod( date, calendar ) ); date = calendar.plusWeeks( date, 2 ); } return periods; }
@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.minusDays( dateTimeUnit, rewindedPeriods ); return cal.toIso( dateTimeUnit ).toJdkDate(); } }
/** * 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; }
end = calendar.minusDays( end, 1 ); end = calendar.minusDays( end, 1 ); DateTimeUnit end = new DateTimeUnit( start ); end = calendar.plusMonths( end, 2 ); end = calendar.minusDays( end, 1 ); DateTimeUnit end = new DateTimeUnit( start ); end = calendar.plusMonths( end, 3 ); end = calendar.minusDays( end, 1 ); DateTimeUnit end = new DateTimeUnit( start ); end = calendar.plusMonths( end, 6 ); end = calendar.minusDays( end, 1 ); DateTimeUnit end = new DateTimeUnit( start ); end = calendar.plusMonths( end, 6 ); end = calendar.minusDays( end, 1 ); DateTimeUnit end = new DateTimeUnit( start ); end = calendar.plusMonths( end, 6 ); end = calendar.minusDays( end, 1 ); DateTimeUnit end = new DateTimeUnit( start ); end = calendar.plusYears( end, 1 ); end = calendar.minusDays( end, 1 ); DateTimeUnit end = new DateTimeUnit( start );
@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 ); }