(
int yearOfWeekdate,
int weekOfYear,
Weekday dayOfWeek,
boolean validating
)
| 2183 | } |
| 2184 | |
| 2185 | private static PlainDate ofWeekdate( |
| 2186 | int yearOfWeekdate, |
| 2187 | int weekOfYear, |
| 2188 | Weekday dayOfWeek, |
| 2189 | boolean validating |
| 2190 | ) { |
| 2191 | |
| 2192 | if ((weekOfYear < 1) || (weekOfYear > 53)) { |
| 2193 | if (validating) { |
| 2194 | throw new IllegalArgumentException(woyFailed(weekOfYear)); |
| 2195 | } else { |
| 2196 | return null; |
| 2197 | } |
| 2198 | } |
| 2199 | |
| 2200 | if ( |
| 2201 | validating |
| 2202 | && ((yearOfWeekdate < MIN_YEAR) || (yearOfWeekdate > MAX_YEAR)) |
| 2203 | ) { |
| 2204 | throw new IllegalArgumentException(yowFailed(yearOfWeekdate)); |
| 2205 | } |
| 2206 | |
| 2207 | Weekday wdNewYear = |
| 2208 | Weekday.valueOf(GregorianMath.getDayOfWeek(yearOfWeekdate, 1, 1)); |
| 2209 | int dow = wdNewYear.getValue(); |
| 2210 | int doy = ( |
| 2211 | ((dow <= 4) ? 2 - dow : 9 - dow) |
| 2212 | + (weekOfYear - 1) * 7 |
| 2213 | + dayOfWeek.getValue() - 1 |
| 2214 | ); |
| 2215 | int y = yearOfWeekdate; |
| 2216 | |
| 2217 | if (doy <= 0) { |
| 2218 | y--; |
| 2219 | doy += (GregorianMath.isLeapYear(y) ? 366 : 365); |
| 2220 | } else { |
| 2221 | int yearlen = |
| 2222 | (GregorianMath.isLeapYear(y) ? 366 : 365); |
| 2223 | if (doy > yearlen) { |
| 2224 | doy -= yearlen; |
| 2225 | y++; |
| 2226 | } |
| 2227 | } |
| 2228 | |
| 2229 | PlainDate result = PlainDate.ofYearDay(y, doy, dayOfWeek); |
| 2230 | |
| 2231 | if ((weekOfYear == 53) && (result.getWeekOfYear() != 53)) { |
| 2232 | if (validating) { |
| 2233 | throw new IllegalArgumentException(woyFailed(weekOfYear)); |
| 2234 | } else { |
| 2235 | return null; |
| 2236 | } |
| 2237 | } |
| 2238 | |
| 2239 | return result; |
| 2240 | |
| 2241 | } |
| 2242 |
no test coverage detected