修正或追加节假日数据。节假日名称下标从0开始,超过9的,按ASCII码表依次往后排列;调休标识0为上班,否则放假 @param names 用于替换默认的节假日名称列表,传null即可使用默认名称 @param data 需要修正或追加的节假日数据,每18位表示1天依次排列,格式:当天年月日YYYYMMDD(8位)+节假日名称下标(1位)+调休标识(1位)+节假日当天YYYYMMDD(8位)。例:202005023120200501代表2020-05-02为劳动节放假,对应节假日为2020-05-01
(String[] names, String data)
| 186 | * @param data 需要修正或追加的节假日数据,每18位表示1天依次排列,格式:当天年月日YYYYMMDD(8位)+节假日名称下标(1位)+调休标识(1位)+节假日当天YYYYMMDD(8位)。例:202005023120200501代表2020-05-02为劳动节放假,对应节假日为2020-05-01 |
| 187 | */ |
| 188 | public static void fix(String[] names, String data){ |
| 189 | if(null != names){ |
| 190 | NAMES_IN_USE = names; |
| 191 | } |
| 192 | if(null == data){ |
| 193 | return; |
| 194 | } |
| 195 | StringBuilder append = new StringBuilder(); |
| 196 | while(data.length() >= SIZE){ |
| 197 | String segment = data.substring(0, SIZE); |
| 198 | String day = segment.substring(0, 8); |
| 199 | boolean remove = TAG_REMOVE.equals(segment.substring(8, 9)); |
| 200 | Holiday holiday = getHoliday(day); |
| 201 | if(null == holiday){ |
| 202 | if (!remove) { |
| 203 | append.append(segment); |
| 204 | } |
| 205 | }else{ |
| 206 | int nameIndex = -1; |
| 207 | for(int i = 0,j = NAMES_IN_USE.length; i < j; i++){ |
| 208 | if(NAMES_IN_USE[i].equals(holiday.getName())){ |
| 209 | nameIndex = i; |
| 210 | break; |
| 211 | } |
| 212 | } |
| 213 | if(nameIndex>-1) { |
| 214 | String old = day + (char)(nameIndex + ZERO) + (holiday.isWork() ? ZERO : '1') + holiday.getTarget().replace("-",""); |
| 215 | DATA_IN_USE = DATA_IN_USE.replace(old, remove ? "" : segment); |
| 216 | } |
| 217 | } |
| 218 | data = data.substring(SIZE); |
| 219 | } |
| 220 | if(append.length() > 0){ |
| 221 | DATA_IN_USE += append.toString(); |
| 222 | } |
| 223 | } |
| 224 | |
| 225 | /** |
| 226 | * 使用默认的节假日名称来修正或追加节假日数据。节假日名称下标从0开始,最大为8(元旦节0,春节1,清明节2,劳动节3,端午节4,中秋节5,国庆节6,国庆中秋7,抗战胜利日8);调休标识0为上班,否则放假 |