/** * Returns a local period identifier for a specific period / calendar. * * @param period the list of periods. * @param calendar the calendar to use for generation of iso periods. * @return Period identifier based on given calendar */ public static String getLocalPeriodIdentifier( Period period, Calendar calendar ) { if ( calendar.isIso8601() ) { return period.getIsoDate(); } return period.getPeriodType().getIsoDate( calendar.fromIso( period.getStartDate() ) ); }
/** * 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 Date getRewindedDate( Date date, Integer rewindedPeriods ) { Calendar cal = getCalendar(); date = date != null ? date : new Date(); rewindedPeriods = rewindedPeriods != null ? rewindedPeriods : 1; DateTimeUnit dateTimeUnit = cal.fromIso( DateTimeUnit.fromJdkDate( date ) ); dateTimeUnit = cal.minusMonths( dateTimeUnit, rewindedPeriods ); return cal.toIso( dateTimeUnit ).toJdkDate(); }
/** * Returns an instance of a Calendar without any time of day, with the * current date. * * @return an instance of a Calendar without any time of day. */ public static Calendar createCalendarInstance() { org.hisp.dhis.calendar.Calendar cal = getCalendar(); return cal.toIso( cal.today() ).toJdkCalendar(); }
@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(); } }
DateTimeUnit dateTimeUnit = new DateTimeUnit( year, month, day, calendar.isIso8601() ); dateTimeUnit.setDayOfWeek( calendar.weekday( dateTimeUnit ) ); if ( periodType == null || week < 1 || week > calendar.weeksInYear( year ) ) end = calendar.plusWeeks( start, 1 ); end = calendar.minusDays( end, 1 ); if ( periodType == null || week < 1 || week > calendar.weeksInYear( year ) ) DateTimeUnit end = calendar.plusWeeks( start, 2 ); end = calendar.minusDays( end, 1 ); DateTimeUnit start = new DateTimeUnit( year, month, 1, calendar.isIso8601() ); DateTimeUnit end = new DateTimeUnit( year, month, calendar.daysInMonth( start.getYear(), start.getMonth() ), calendar.isIso8601() ); start.setDayOfWeek( calendar.weekday( start ) ); end.setDayOfWeek( calendar.weekday( end ) ); DateTimeUnit start = new DateTimeUnit( year, (month * 2) - 1, 1, calendar.isIso8601() ); DateTimeUnit end = new DateTimeUnit( start ); end = calendar.plusMonths( end, 2 ); end = calendar.minusDays( end, 1 ); start.setDayOfWeek( calendar.weekday( start ) ); end.setDayOfWeek( calendar.weekday( end ) ); DateTimeUnit start = new DateTimeUnit( year, ((quarter - 1) * 3) + 1, 1, calendar.isIso8601() );
/** * Returns an instance of a DateUnit. * * @param date date of calendar in local calendar * @return an instance of a Calendar without any time of day. */ public static DateTimeUnit createLocalDateUnitInstance( Date date, org.hisp.dhis.calendar.Calendar calendar ) { return calendar.fromIso( date ); }
if ( calendar.isIso8601() ) if ( date != null && !calendar.isIso8601() ) dateString = calendar.formattedDate( calendar.fromIso( date ) );
@Override public String getIsoDate( DateTimeUnit dateTimeUnit, Calendar calendar ) { int year; int week; if ( calendar.isIso8601() ) { LocalDate date = LocalDate.of( dateTimeUnit.getYear(), dateTimeUnit.getMonth(), dateTimeUnit.getDay() ); WeekFields weekFields = WeekFields.of( DayOfWeek.MONDAY, 4 ); year = date.get( weekFields.weekBasedYear() ); week = date.get( weekFields.weekOfWeekBasedYear() ) / 2; } else { DateTimeUnit date = adjustToStartOfBiWeek( dateTimeUnit, calendar ); week = calendar.week( date ); if ( week == 1 && date.getMonth() == calendar.monthsInYear() ) { date.setYear( date.getYear() + 1 ); } year = date.getYear(); } return String.format( "%d%s%d", year, weekPrefix, week ); }
if ( calendar.isIso8601() ) calendar.isIso8601() ); DateTimeUnit date = new DateTimeUnit( year, adjustedDate.getMonth(), adjustedDate.getDay(), calendar.isIso8601() ); if ( calendar.isoWeek( date ) == calendar.weeksInYear( year ) ) date = calendar.plusWeeks( date, 1 ); date = calendar.plusWeeks( date, week - 1 ); return date;
List<String> periodUids = calendar.isIso8601() ? getUids( params.getDimensionOrFilterItems( PERIOD_DIM_ID ) ) : getLocalPeriodIdentifiers( params.getDimensionOrFilterItems( PERIOD_DIM_ID ), calendar );
/** * Generates bi-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<>(); DateTimeUnit date = adjustToStartOfBiWeek( start, calendar ); date = adjustToStartOfBiWeek( calendar.fromIso( date.getYear(), 1, 1 ), calendar ); for ( int i = 0; i < calendar.weeksInYear( start.getYear() ) / 2; i++ ) { periods.add( createPeriod( date, calendar ) ); date = calendar.plusWeeks( date, 2 ); } return periods; }
@Override public String getIsoDate( DateTimeUnit dateTimeUnit, Calendar calendar ) { DateTimeUnit newUnit = dateTimeUnit; if ( !calendar.name().equals( ISO_CALENDAR_NAME ) && newUnit.isIso8601() ) { newUnit = calendar.fromIso( newUnit ); } switch ( newUnit.getMonth() ) { case 1: return newUnit.getYear() + "Q1"; case 4: return newUnit.getYear() + "Q2"; case 7: return newUnit.getYear() + "Q3"; case 10: return newUnit.getYear() + "Q4"; default: throw new IllegalArgumentException( "Month not valid [1,4,7,10], was given " + dateTimeUnit.getMonth() ); } }
Date periodEndDate = period.getEndDate(); DateTimeUnit start = PeriodType.getCalendar().fromIso( periodStartDate ); DateTimeUnit end = PeriodType.getCalendar().fromIso( periodEndDate ); startDate = PeriodType.getCalendar().formattedDate( startPattern, start ); endDate = PeriodType.getCalendar().formattedDate( endPattern, end );
/** * 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; }
/** * 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 ); }
@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 ); }
/** * Sets the time of the calendar to now. */ public Cal now() { dateTimeUnit = getCalendar().today(); return this; }