周推移 @param weeks 推移的周数,负数为倒推 @param separateMonth 是否按月单独计算 @return 推移后的阳历周
(int weeks, boolean separateMonth)
| 189 | * @return 推移后的阳历周 |
| 190 | */ |
| 191 | public SolarWeek next(int weeks, boolean separateMonth) { |
| 192 | if (0 == weeks) { |
| 193 | return new SolarWeek(year, month, day, start); |
| 194 | } |
| 195 | Solar solar = Solar.fromYmd(year, month, day); |
| 196 | if (separateMonth) { |
| 197 | int n = weeks; |
| 198 | SolarWeek week = new SolarWeek(solar.getYear(), solar.getMonth(), solar.getDay(), start); |
| 199 | int month = this.month; |
| 200 | boolean plus = n > 0; |
| 201 | while (0 != n) { |
| 202 | solar = solar.next(plus ? 7 : -7); |
| 203 | week = new SolarWeek(solar.getYear(), solar.getMonth(), solar.getDay(), start); |
| 204 | int weekMonth = week.getMonth(); |
| 205 | if (month != weekMonth) { |
| 206 | int index = week.getIndex(); |
| 207 | if (plus) { |
| 208 | if (1 == index) { |
| 209 | Solar firstDay = week.getFirstDay(); |
| 210 | week = new SolarWeek(firstDay.getYear(), firstDay.getMonth(), firstDay.getDay(), start); |
| 211 | weekMonth = week.getMonth(); |
| 212 | } else { |
| 213 | solar = Solar.fromYmd(week.getYear(), week.getMonth(), 1); |
| 214 | week = new SolarWeek(solar.getYear(), solar.getMonth(), solar.getDay(), start); |
| 215 | } |
| 216 | } else { |
| 217 | if (SolarUtil.getWeeksOfMonth(week.getYear(), week.getMonth(), start) == index) { |
| 218 | Solar lastDay = week.getFirstDay().next(6); |
| 219 | week = new SolarWeek(lastDay.getYear(), lastDay.getMonth(), lastDay.getDay(), start); |
| 220 | weekMonth = week.getMonth(); |
| 221 | } else { |
| 222 | solar = Solar.fromYmd(week.getYear(), week.getMonth(), SolarUtil.getDaysOfMonth(week.getYear(), week.getMonth())); |
| 223 | week = new SolarWeek(solar.getYear(), solar.getMonth(), solar.getDay(), start); |
| 224 | } |
| 225 | } |
| 226 | month = weekMonth; |
| 227 | } |
| 228 | n -= plus ? 1 : -1; |
| 229 | } |
| 230 | return week; |
| 231 | } else { |
| 232 | solar = solar.next(weeks * 7); |
| 233 | return new SolarWeek(solar.getYear(), solar.getMonth(), solar.getDay(), start); |
| 234 | } |
| 235 | } |
| 236 | |
| 237 | /** |
| 238 | * 获取本周第一天的阳历日期(可能跨月) |
no test coverage detected