/** * Sets the current month and day. * * @param month the month starting at 1. * @param day the day of the month starting at 1. */ public Cal set( int month, int day ) { dateTimeUnit.setMonth( month ); dateTimeUnit.setDay( day ); return this; }
/** * 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; }
@Override public DateTimeUnit minusMonths( DateTimeUnit dateTimeUnit, int months ) { DateTimeUnit result = new DateTimeUnit( dateTimeUnit ); while ( months != 0 ) { result.setMonth( result.getMonth() - 1 ); if ( result.getMonth() < 1 ) { result.setMonth( monthsInYear() ); result.setYear( result.getYear() - 1 ); } months--; } updateDateUnit( result ); return result; }
@Override public DateTimeUnit minusMonths( DateTimeUnit dateTimeUnit, int months ) { DateTimeUnit result = new DateTimeUnit( dateTimeUnit ); int newMonths = months; while ( newMonths != 0 ) { result.setMonth( result.getMonth() - 1 ); if ( result.getMonth() < 1 ) { result.setMonth( monthsInYear() ); result.setYear( result.getYear() - 1 ); } newMonths--; } updateDateUnit( result ); return result; }
/** * Generates quarterly Periods for the whole year in which the given * Period's startDate exists. */ @Override public List<Period> generatePeriods( DateTimeUnit dateTimeUnit ) { org.hisp.dhis.calendar.Calendar cal = getCalendar(); dateTimeUnit.setMonth( 1 ); dateTimeUnit.setDay( 1 ); int year = dateTimeUnit.getYear(); List<Period> periods = Lists.newArrayList(); while ( year == dateTimeUnit.getYear() ) { periods.add( createPeriod( dateTimeUnit, cal ) ); dateTimeUnit = cal.plusMonths( dateTimeUnit, 3 ); } return periods; }
/** * Generates daily Periods for the whole year in which the given Period's * startDate exists. */ @Override public List<Period> generatePeriods( DateTimeUnit dateTimeUnit ) { dateTimeUnit.setMonth( 1 ); dateTimeUnit.setDay( 1 ); List<Period> periods = Lists.newArrayList(); int year = dateTimeUnit.getYear(); Calendar calendar = getCalendar(); while ( year == dateTimeUnit.getYear() ) { periods.add( createPeriod( dateTimeUnit, calendar ) ); dateTimeUnit = calendar.plusDays( dateTimeUnit, 1 ); } return periods; }
/** * Generates monthly Periods for the whole year in which the given Period's * startDate exists. */ @Override public List<Period> generatePeriods( DateTimeUnit dateTimeUnit ) { Calendar cal = getCalendar(); dateTimeUnit.setMonth( 1 ); dateTimeUnit.setDay( 1 ); List<Period> periods = Lists.newArrayList(); int year = dateTimeUnit.getYear(); while ( dateTimeUnit.getYear() == year ) { periods.add( createPeriod( dateTimeUnit, cal ) ); dateTimeUnit = cal.plusMonths( dateTimeUnit, 1 ); } return periods; }
/** * Generates bimonthly Periods for the whole year in which the start date of * the given Period exists. */ @Override public List<Period> generatePeriods( DateTimeUnit dateTimeUnit ) { Calendar cal = getCalendar(); dateTimeUnit.setMonth( 1 ); dateTimeUnit.setDay( 1 ); List<Period> periods = Lists.newArrayList(); int year = dateTimeUnit.getYear(); while ( dateTimeUnit.getYear() == year ) { periods.add( createPeriod( dateTimeUnit, cal ) ); dateTimeUnit = cal.plusMonths( dateTimeUnit, 2 ); } 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; }
@Override public Period createPeriod( DateTimeUnit dateTimeUnit, Calendar calendar ) { DateTimeUnit start = new DateTimeUnit( dateTimeUnit ); DateTimeUnit end = new DateTimeUnit( dateTimeUnit ); start.setDay( 1 ); start.setMonth( 1 ); end.setMonth( calendar.monthsInYear() ); end.setDay( calendar.daysInMonth( end.getYear(), end.getMonth() ) ); return toIsoPeriod( start, end, calendar ); }
@Override public DateTimeUnit plusMonths( DateTimeUnit dateTimeUnit, int months ) { if ( months < 0 ) { return minusMonths( dateTimeUnit, Math.abs( months ) ); } DateTimeUnit result = new DateTimeUnit( dateTimeUnit ); int newMonths = months; while ( newMonths != 0 ) { result.setMonth( result.getMonth() + 1 ); if ( result.getMonth() > monthsInYear() ) { result.setMonth( 1 ); result.setYear( result.getYear() + 1 ); } newMonths--; } updateDateUnit( result ); return result; }
@Override public DateTimeUnit plusMonths( DateTimeUnit dateTimeUnit, int months ) { if ( months < 0 ) { return minusMonths( dateTimeUnit, Math.abs( months ) ); } DateTimeUnit result = new DateTimeUnit( dateTimeUnit ); while ( months != 0 ) { result.setMonth( result.getMonth() + 1 ); if ( result.getMonth() > monthsInYear() ) { result.setMonth( 1 ); result.setYear( result.getYear() + 1 ); } months--; } updateDateUnit( result ); return result; }
@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 ) { DateTimeUnit start = new DateTimeUnit( dateTimeUnit ); start.setMonth( ((dateTimeUnit.getMonth() - 1) - ((dateTimeUnit.getMonth() - 1) % 3)) + 1 ); start.setDay( 1 ); if ( start.getMonth() > 12 ) { start.setYear( start.getYear() + 1 ); start.setMonth( 1 ); } DateTimeUnit end = new DateTimeUnit( start ); end = calendar.plusMonths( end, 2 ); end.setDay( calendar.daysInMonth( end.getYear(), end.getMonth() ) ); return toIsoPeriod( start, end, calendar ); }
/** * Generates weekly Periods for the whole year in which the given Period's * startDate exists. */ @Override public List<Period> generatePeriods( DateTimeUnit start ) { Calendar calendar = getCalendar(); List<Period> periods = new ArrayList<>(); start = new DateTimeUnit( start ); // create clone so we don't modify the original start DT start.setMonth( 1 ); start.setDay( 4 ); start = adjustToStartOfWeek( start, calendar ); for ( int i = 0; i < calendar.weeksInYear( start.getYear() ); i++ ) { DateInterval interval = calendar.toInterval( start, DateIntervalType.ISO8601_WEEK ); periods.add( new Period( this, interval.getFrom().toJdkDate(), interval.getTo().toJdkDate() ) ); start = calendar.plusWeeks( start, 1 ); } return periods; }
@Override public Period createPeriod( DateTimeUnit dateTimeUnit, Calendar calendar ) { DateTimeUnit start = new DateTimeUnit( dateTimeUnit ); start.setMonth( ((start.getMonth() - 1) - ((start.getMonth() - 1) % 2)) + 1 ); start.setDay( 1 ); DateTimeUnit end = new DateTimeUnit( start ); end = calendar.plusMonths( end, 1 ); end.setDay( calendar.daysInMonth( end.getYear(), end.getMonth() ) ); return toIsoPeriod( start, end, calendar ); }
@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 ); }
@Override public Period createPeriod( DateTimeUnit dateTimeUnit, org.hisp.dhis.calendar.Calendar calendar ) { DateTimeUnit start = new DateTimeUnit( dateTimeUnit ); int baseMonth = getBaseMonth(); int year = start.getMonth() < baseMonth ? (start.getYear() - 1) : start.getYear(); int month = start.getMonth() >= baseMonth && start.getMonth() < (baseMonth + 6) ? baseMonth : (baseMonth + 6); start.setYear( year ); start.setMonth( month ); start.setDay( 1 ); DateTimeUnit end = new DateTimeUnit( start ); end = calendar.plusMonths( end, 5 ); end.setDay( calendar.daysInMonth( end.getYear(), end.getMonth() ) ); return toIsoPeriod( start, end, calendar ); }