1515package org .htmlunit .javascript .proxyautoconfig ;
1616
1717import java .net .InetAddress ;
18- import java .time .LocalDate ;
19- import java .time .LocalTime ;
20- import java .time .ZoneId ;
21- import java .time .ZonedDateTime ;
22- import java .time .format .DateTimeFormatter ;
23- import java .time .format .DateTimeParseException ;
18+ import java .text .SimpleDateFormat ;
19+ import java .util .Calendar ;
2420import java .util .Locale ;
21+ import java .util .TimeZone ;
2522
2623import org .apache .commons .lang3 .StringUtils ;
2724import org .htmlunit .javascript .HtmlUnitScriptable ;
4441public final class ProxyAutoConfig extends HtmlUnitScriptable {
4542
4643 private static final String TIMEZONE_GMT = "GMT" ;
47- private static final ZoneId GMT_ZONE = ZoneId .of (TIMEZONE_GMT );
48- private static final DateTimeFormatter WEEKDAY_FORMATTER = DateTimeFormatter .ofPattern ("EEE" , Locale .ROOT );
49- private static final DateTimeFormatter MONTH_FORMATTER = DateTimeFormatter .ofPattern ("MMM" , Locale .ROOT );
5044
5145 private ProxyAutoConfig () {
5246 super ();
@@ -182,25 +176,25 @@ public static boolean shExpMatch(final String str, final String shexp) {
182176 */
183177 @ JsxFunction
184178 public static boolean weekdayRange (final String wd1 , Object wd2 , final Object gmt ) {
185- ZoneId zoneId = ZoneId . systemDefault ();
179+ TimeZone timezone = TimeZone . getDefault ();
186180 if (TIMEZONE_GMT .equals (JavaScriptEngine .toString (gmt ))
187181 || TIMEZONE_GMT .equals (JavaScriptEngine .toString (wd2 ))) {
188- zoneId = GMT_ZONE ;
182+ timezone = TimeZone . getTimeZone ( TIMEZONE_GMT ) ;
189183 }
190184 if (JavaScriptEngine .isUndefined (wd2 ) || TIMEZONE_GMT .equals (JavaScriptEngine .toString (wd2 ))) {
191185 wd2 = wd1 ;
192186 }
193-
194- LocalDate today = LocalDate .now (zoneId );
187+ final Calendar calendar = Calendar .getInstance (timezone );
195188 for (int i = 0 ; i < 7 ; i ++) {
196- final String day = today .format (WEEKDAY_FORMATTER ).toUpperCase (Locale .ROOT );
189+ final String day = new SimpleDateFormat ("EEE" , Locale .ROOT )
190+ .format (calendar .getTime ()).toUpperCase (Locale .ROOT );
197191 if (day .equals (wd2 )) {
198192 return true ;
199193 }
200194 if (day .equals (wd1 )) {
201195 return i == 0 ;
202196 }
203- today = today . plusDays ( 1 );
197+ calendar . add ( Calendar . DAY_OF_WEEK , 1 );
204198 }
205199 return false ;
206200 }
@@ -220,13 +214,13 @@ public static boolean weekdayRange(final String wd1, Object wd2, final Object gm
220214 public static boolean dateRange (final String value1 , final Object value2 , final Object value3 ,
221215 final Object value4 , final Object value5 , final Object value6 , final Object value7 ) {
222216 final Object [] values = {value1 , value2 , value3 , value4 , value5 , value6 , value7 };
223- ZoneId zoneId = ZoneId . systemDefault ();
217+ TimeZone timezone = TimeZone . getDefault ();
224218
225- // actual values length
219+ //actual values length
226220 int length ;
227221 for (length = values .length - 1 ; length >= 0 ; length --) {
228222 if (TIMEZONE_GMT .equals (JavaScriptEngine .toString (values [length ]))) {
229- zoneId = GMT_ZONE ;
223+ timezone = TimeZone . getTimeZone ( TIMEZONE_GMT ) ;
230224 break ;
231225 }
232226 else if (!JavaScriptEngine .isUndefined (values [length ])) {
@@ -241,78 +235,81 @@ else if (!JavaScriptEngine.isUndefined(values[length])) {
241235 final int month2 ;
242236 final int year1 ;
243237 final int year2 ;
244- final ZonedDateTime dateTime1 ;
245- final ZonedDateTime dateTime2 ;
246-
238+ final Calendar cal1 ;
239+ final Calendar cal2 ;
247240 switch (length ) {
248241 case 1 :
249242 final int day = getSmallInt (value1 );
250243 final int month = dateRange_getMonth (value1 );
251244 final int year = dateRange_getYear (value1 );
252- dateTime1 = dateRange_createDateTime ( zoneId , day , month , year );
253- dateTime2 = dateTime1 ;
245+ cal1 = dateRange_createCalendar ( timezone , day , month , year );
246+ cal2 = ( Calendar ) cal1 . clone () ;
254247 break ;
248+
255249 case 2 :
256250 day1 = getSmallInt (value1 );
257251 month1 = dateRange_getMonth (value1 );
258252 year1 = dateRange_getYear (value1 );
259- dateTime1 = dateRange_createDateTime ( zoneId , day1 , month1 , year1 );
253+ cal1 = dateRange_createCalendar ( timezone , day1 , month1 , year1 );
260254 day2 = getSmallInt (value2 );
261255 month2 = dateRange_getMonth (value2 );
262256 year2 = dateRange_getYear (value2 );
263- dateTime2 = dateRange_createDateTime ( zoneId , day2 , month2 , year2 );
257+ cal2 = dateRange_createCalendar ( timezone , day2 , month2 , year2 );
264258 break ;
259+
265260 case 4 :
266261 day1 = getSmallInt (value1 );
267262 if (day1 != -1 ) {
268263 month1 = dateRange_getMonth (value2 );
269264 day2 = getSmallInt (value3 );
270265 month2 = dateRange_getMonth (value4 );
271- dateTime1 = dateRange_createDateTime ( zoneId , day1 , month1 , -1 );
272- dateTime2 = dateRange_createDateTime ( zoneId , day2 , month2 , -1 );
266+ cal1 = dateRange_createCalendar ( timezone , day1 , month1 , -1 );
267+ cal2 = dateRange_createCalendar ( timezone , day2 , month2 , -1 );
273268 }
274269 else {
275270 month1 = dateRange_getMonth (value1 );
276- year1 = getSmallInt (value2 );
277- month2 = dateRange_getMonth (value3 );
278- year2 = getSmallInt (value4 );
279- dateTime1 = dateRange_createDateTime ( zoneId , -1 , month1 , year1 );
280- dateTime2 = dateRange_createDateTime ( zoneId , -1 , month2 , year2 );
271+ year1 = dateRange_getMonth (value2 );
272+ month2 = getSmallInt (value3 );
273+ year2 = dateRange_getMonth (value4 );
274+ cal1 = dateRange_createCalendar ( timezone , -1 , month1 , year1 );
275+ cal2 = dateRange_createCalendar ( timezone , -1 , month2 , year2 );
281276 }
282277 break ;
278+
283279 default :
284280 day1 = getSmallInt (value1 );
285281 month1 = dateRange_getMonth (value2 );
286282 year1 = dateRange_getYear (value3 );
287283 day2 = getSmallInt (value4 );
288284 month2 = dateRange_getMonth (value5 );
289285 year2 = dateRange_getYear (value6 );
290- dateTime1 = dateRange_createDateTime ( zoneId , day1 , month1 , year1 );
291- dateTime2 = dateRange_createDateTime ( zoneId , day2 , month2 , year2 );
286+ cal1 = dateRange_createCalendar ( timezone , day1 , month1 , year1 );
287+ cal2 = dateRange_createCalendar ( timezone , day2 , month2 , year2 );
292288 }
293289
294- final ZonedDateTime now = ZonedDateTime .now (zoneId )
295- .withSecond (0 )
296- .withNano (0 );
297- final ZonedDateTime dt1 = dateTime1 .withSecond (0 ).withNano (0 );
298- final ZonedDateTime dt2 = dateTime2 .withSecond (0 ).withNano (0 );
299-
300- return now .isEqual (dt1 ) || (now .isAfter (dt1 ) && now .isBefore (dt2 )) || now .isEqual (dt2 );
290+ final Calendar today = Calendar .getInstance (timezone );
291+ today .set (Calendar .MILLISECOND , 0 );
292+ today .set (Calendar .SECOND , 0 );
293+ cal1 .set (Calendar .MILLISECOND , 0 );
294+ cal1 .set (Calendar .SECOND , 0 );
295+ cal2 .set (Calendar .MILLISECOND , 0 );
296+ cal2 .set (Calendar .SECOND , 0 );
297+ return today .equals (cal1 ) || (today .after (cal1 ) && today .before (cal2 )) || today .equals (cal2 );
301298 }
302299
303- private static ZonedDateTime dateRange_createDateTime (final ZoneId zoneId ,
300+ private static Calendar dateRange_createCalendar (final TimeZone timezone ,
304301 final int day , final int month , final int year ) {
305- ZonedDateTime dateTime = ZonedDateTime . now ( zoneId );
302+ final Calendar calendar = Calendar . getInstance ( timezone );
306303 if (day != -1 ) {
307- dateTime = dateTime . withDayOfMonth ( day );
304+ calendar . set ( Calendar . DAY_OF_MONTH , day );
308305 }
309306 if (month != -1 ) {
310- dateTime = dateTime . withMonth ( month + 1 ); // Calendar months are 0-based, java.time is 1-based
307+ calendar . set ( Calendar . MONTH , month );
311308 }
312309 if (year != -1 ) {
313- dateTime = dateTime . withYear ( year );
310+ calendar . set ( Calendar . YEAR , year );
314311 }
315- return dateTime ;
312+ return calendar ;
316313 }
317314
318315 private static int getSmallInt (final Object object ) {
@@ -330,11 +327,12 @@ private static int dateRange_getMonth(final Object object) {
330327 final String s = JavaScriptEngine .toString (object );
331328 if (Character .isLetter (s .charAt (0 ))) {
332329 try {
333- final LocalDate date = LocalDate .parse (s + " 1" ,
334- DateTimeFormatter .ofPattern ("MMM d" , Locale .ROOT ));
335- return date .getMonthValue () - 1 ; // Return 0-based month for compatibility
330+ final Calendar cal = Calendar .getInstance (Locale .ROOT );
331+ cal .clear ();
332+ cal .setTime (new SimpleDateFormat ("MMM" , Locale .ROOT ).parse (s ));
333+ return cal .get (Calendar .MONTH );
336334 }
337- catch (final DateTimeParseException ignored ) {
335+ catch (final Exception ignored ) {
338336 // empty
339337 }
340338 }
@@ -367,13 +365,13 @@ private static int dateRange_getYear(final Object object) {
367365 public static boolean timeRange (final String value1 , final Object value2 , final Object value3 ,
368366 final Object value4 , final Object value5 , final Object value6 , final Object value7 ) {
369367 final Object [] values = {value1 , value2 , value3 , value4 , value5 , value6 , value7 };
370- ZoneId zoneId = ZoneId . systemDefault ();
368+ TimeZone timezone = TimeZone . getDefault ();
371369
372- // actual values length
370+ //actual values length
373371 int length ;
374372 for (length = values .length - 1 ; length >= 0 ; length --) {
375373 if (TIMEZONE_GMT .equals (JavaScriptEngine .toString (values [length ]))) {
376- zoneId = GMT_ZONE ;
374+ timezone = TimeZone . getTimeZone ( TIMEZONE_GMT ) ;
377375 break ;
378376 }
379377 else if (!JavaScriptEngine .isUndefined (values [length ])) {
@@ -388,56 +386,60 @@ else if (!JavaScriptEngine.isUndefined(values[length])) {
388386 final int min2 ;
389387 final int second1 ;
390388 final int second2 ;
391- final LocalTime time1 ;
392- final LocalTime time2 ;
393-
389+ final Calendar cal1 ;
390+ final Calendar cal2 ;
394391 switch (length ) {
395392 case 1 :
396393 hour1 = getSmallInt (value1 );
397- time1 = timeRange_createTime (hour1 , -1 , -1 );
398- time2 = time1 .plusHours (1 );
394+ cal1 = timeRange_createCalendar (timezone , hour1 , -1 , -1 );
395+ cal2 = (Calendar ) cal1 .clone ();
396+ cal2 .add (Calendar .HOUR_OF_DAY , 1 );
399397 break ;
398+
400399 case 2 :
401400 hour1 = getSmallInt (value1 );
402- time1 = timeRange_createTime ( hour1 , -1 , -1 );
401+ cal1 = timeRange_createCalendar ( timezone , hour1 , -1 , -1 );
403402 hour2 = getSmallInt (value2 );
404- time2 = timeRange_createTime ( hour2 , -1 , -1 );
403+ cal2 = timeRange_createCalendar ( timezone , hour2 , -1 , -1 );
405404 break ;
405+
406406 case 4 :
407407 hour1 = getSmallInt (value1 );
408408 min1 = getSmallInt (value2 );
409409 hour2 = getSmallInt (value3 );
410410 min2 = getSmallInt (value4 );
411- time1 = timeRange_createTime ( hour1 , min1 , -1 );
412- time2 = timeRange_createTime ( hour2 , min2 , -1 );
411+ cal1 = dateRange_createCalendar ( timezone , hour1 , min1 , -1 );
412+ cal2 = dateRange_createCalendar ( timezone , hour2 , min2 , -1 );
413413 break ;
414+
414415 default :
415416 hour1 = getSmallInt (value1 );
416417 min1 = getSmallInt (value2 );
417418 second1 = getSmallInt (value3 );
418419 hour2 = getSmallInt (value4 );
419420 min2 = getSmallInt (value5 );
420421 second2 = getSmallInt (value6 );
421- time1 = timeRange_createTime ( hour1 , min1 , second1 );
422- time2 = timeRange_createTime ( hour2 , min2 , second2 );
422+ cal1 = dateRange_createCalendar ( timezone , hour1 , min1 , second1 );
423+ cal2 = dateRange_createCalendar ( timezone , hour2 , min2 , second2 );
423424 }
424425
425- final LocalTime now = LocalTime . now ( zoneId );
426- return now .equals (time1 ) || ( now .isAfter ( time1 ) && now .isBefore ( time2 )) || now .equals (time2 );
426+ final Calendar now = Calendar . getInstance ( timezone );
427+ return now .equals (cal1 ) || now .after ( cal1 ) && now .before ( cal2 ) || now .equals (cal2 );
427428 }
428429
429- private static LocalTime timeRange_createTime (final int hour , final int minute , final int second ) {
430- LocalTime time = LocalTime .now ();
430+ private static Calendar timeRange_createCalendar (final TimeZone timezone ,
431+ final int hour , final int minute , final int second ) {
432+ final Calendar calendar = Calendar .getInstance (timezone );
431433 if (hour != -1 ) {
432- time = time . withHour ( hour );
434+ calendar . set ( Calendar . HOUR_OF_DAY , hour );
433435 }
434436 if (minute != -1 ) {
435- time = time . withMinute ( minute );
437+ calendar . set ( Calendar . MINUTE , minute );
436438 }
437439 if (second != -1 ) {
438- time = time . withSecond ( second );
440+ calendar . set ( Calendar . SECOND , second );
439441 }
440- return time ;
442+ return calendar ;
441443 }
442444
443445 /**
@@ -448,7 +450,9 @@ private static LocalTime timeRange_createTime(final int hour, final int minute,
448450 @ JsxFunction (functionName = "convert_addr" )
449451 public static long convertAddr (final String ip ) {
450452 final String [] parts = StringUtils .split (ip , '.' );
451- return ((Integer .parseInt (parts [0 ]) & 0xff ) << 24 )
453+
454+ return
455+ ((Integer .parseInt (parts [0 ]) & 0xff ) << 24 )
452456 | ((Integer .parseInt (parts [1 ]) & 0xff ) << 16 )
453457 | ((Integer .parseInt (parts [2 ]) & 0xff ) << 8 )
454458 | (Integer .parseInt (parts [3 ]) & 0xff );
0 commit comments