@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 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 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 ); }
DateTimeUnit end = new DateTimeUnit( year, calendar.monthsInYear(), calendar.daysInMonth( start.getYear(), calendar.monthsInYear() ), calendar.isIso8601() );