@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 boolean equals( Object o ) { if ( this == o ) return true; if ( o == null || getClass() != o.getClass() ) return false; DateInterval that = (DateInterval) o; if ( from != null ? !from.equals( that.from ) : that.from != null ) return false; if ( to != null ? !to.equals( that.to ) : that.to != null ) return false; if ( type != that.type ) return false; return true; }
/** * @param date the date. */ public Cal( Date date ) { dateTimeUnit = DateTimeUnit.fromJdkDate( date ); }
public DateTimeUnit( DateTimeUnit dateTimeUnit, boolean iso8601 ) { this( iso8601 ); this.year = dateTimeUnit.getYear(); this.month = dateTimeUnit.getMonth(); this.day = dateTimeUnit.getDay(); this.dayOfWeek = dateTimeUnit.getDayOfWeek(); }
/** * 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; }
@Override public DateTimeUnit toIso( DateTimeUnit dateTimeUnit ) { if ( dateTimeUnit.isIso8601() ) { return dateTimeUnit; } DateTime dateTime = START_ISO.toJodaDateTime(); int totalDays = 0; for ( int year = START_NEPAL.getYear(); year < dateTimeUnit.getYear(); year++ ) { totalDays += getYearTotal( year ); } for ( int month = START_NEPAL.getMonth(); month < dateTimeUnit.getMonth(); month++ ) { totalDays += CONVERSION_MAP.get( dateTimeUnit.getYear() )[month]; } totalDays += dateTimeUnit.getDay() - START_NEPAL.getDay(); dateTime = dateTime.plusDays( totalDays ); return new DateTimeUnit( DateTimeUnit.fromJodaDateTime( dateTime ), true ); }
/** * 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; }
private void updateDateUnit( DateTimeUnit result ) { int dm = CONVERSION_MAP.get( result.getYear() )[result.getMonth()]; if ( result.getDay() > dm ) { result.setDay( dm ); } result.setDayOfWeek( weekday( result ) ); }
@Override public DateTimeUnit toIso( DateTimeUnit dateTimeUnit ) { if ( dateTimeUnit.isIso8601() ) { return dateTimeUnit; } DateTime dateTime = dateTimeUnit.toJodaDateTime( chronology ); dateTime = dateTime.withChronology( ISOChronology.getInstance( DateTimeZone.forTimeZone( dateTimeUnit.getTimeZone() ) ) ); return new DateTimeUnit( DateTimeUnit.fromJodaDateTime( dateTime ), true ); }
@Override public DateTimeUnit minusDays( DateTimeUnit dateTimeUnit, int days ) { DateTime dateTime = dateTimeUnit.toJodaDateTime( chronology ); return DateTimeUnit.fromJodaDateTime( dateTime.minusDays( days ), dateTimeUnit.isIso8601() ); }
/** * Returns the start date for the given year, inclusive. * * @param calendar the calendar to base the date on. * @param year the year. * @return the start date. */ public static Date getStartDate( Calendar calendar, Integer year ) { return calendar.isoStartOfYear( year ).toJdkDate(); }
@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; }
@Override public DateTimeUnit isoStartOfYear( int year ) { return new DateTimeUnit( year, 1, 1 ); }
@Override public String getIsoDate( DateTimeUnit dateTimeUnit, Calendar calendar ) { return String.valueOf( dateTimeUnit.getYear() ); }
private DateInterval toDayIsoInterval( DateTimeUnit dateTimeUnit, int offset, int length ) { DateTime from = dateTimeUnit.toJodaDateTime( chronology ); if ( offset > 0 ) { from = from.plusDays( offset ); } else if ( offset < 0 ) { from = from.minusDays( -offset ); } DateTime to = new DateTime( from ).plusDays( length ); DateTimeUnit fromDateTimeUnit = DateTimeUnit.fromJodaDateTime( from ); DateTimeUnit toDateTimeUnit = DateTimeUnit.fromJodaDateTime( to ); fromDateTimeUnit.setDayOfWeek( isoWeekday( fromDateTimeUnit ) ); toDateTimeUnit.setDayOfWeek( isoWeekday( toDateTimeUnit ) ); return new DateInterval( toIso( fromDateTimeUnit ), toIso( toDateTimeUnit ), DateIntervalType.ISO8601_DAY ); }
@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(); }