@Override public DateTimeUnit getDateWithOffset( DateTimeUnit dateTimeUnit, int offset, org.hisp.dhis.calendar.Calendar calendar ) { dateTimeUnit.setYear( dateTimeUnit.getYear() - dateTimeUnit.getYear() % 2 + ( 2 * offset ) ); return dateTimeUnit; }
@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 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 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 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( PeriodType.MAP_WEEK_TYPE.get( getName() ), 4 ); year = date.get( weekFields.weekBasedYear() ); week = date.get( weekFields.weekOfWeekBasedYear() ); } else { dateTimeUnit = adjustToStartOfWeek( dateTimeUnit, calendar ); week = calendar.week( dateTimeUnit ); if ( week == 1 && dateTimeUnit.getMonth() == calendar.monthsInYear() ) { dateTimeUnit.setYear( dateTimeUnit.getYear() + 1 ); } year = dateTimeUnit.getYear(); } return String.format( "%d%s%d", year, weekPrefix, week ); }
@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; }
@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 ); }
@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 ); }
@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 ); }
@Override public Period createPeriod( DateTimeUnit dateTimeUnit, Calendar calendar ) { DateTimeUnit start = new DateTimeUnit( dateTimeUnit ); int baseMonth = getBaseMonth(); int year = start.getYear(); int month = baseMonth; if ( start.getMonth() < 5 ) { month = baseMonth; year = year - 1; } if ( start.getMonth() >= 5 && start.getMonth() <= 10 ) { month = 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 ); }