public DateTimeUnit adjustToStartOfBiWeek( DateTimeUnit dateTimeUnit, Calendar calendar ) { int biWeekday = calendar.weekday( dateTimeUnit ) + ( 1 - ( calendar.week( dateTimeUnit ) % 2 ) ) * 7; if ( biWeekday > startOfWeek ) { dateTimeUnit = calendar.minusDays( dateTimeUnit, biWeekday - startOfWeek ); } else if ( biWeekday < startOfWeek ) { dateTimeUnit = calendar.minusDays( dateTimeUnit, biWeekday + (frequencyOrder - startOfWeek) ); } return dateTimeUnit; } }
@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 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 ); }