src/java.base/share/classes/sun/util/calendar/ZoneInfoFile.java

Print this page




 598                     // hacking: see comment above
 599                     if (dom < 0 || dom >= 24) {
 600                         params[6] = -1;
 601                         params[7] = toCalendarDOW[dow];
 602                     } else {
 603                         params[6] = dom;
 604                         params[7] = -toCalendarDOW[dow];
 605                     }
 606                 }
 607                 params[8] = endRule.secondOfDay * 1000;
 608                 params[9] = toSTZTime[endRule.timeDefinition];
 609                 dstSavings = (startRule.offsetAfter - startRule.offsetBefore) * 1000;
 610 
 611                 // Note: known mismatching -> Asia/Amman
 612                 //                            Asia/Gaza
 613                 //                            Asia/Hebron
 614                 // ZoneInfo :      startDayOfWeek=5     <= Thursday
 615                 //                 startTime=86400000   <= 24 hours
 616                 // This:           startDayOfWeek=6
 617                 //                 startTime=0
 618                 // Below is the workaround, it probably slows down everyone a little


 619                 if (params[2] == 6 && params[3] == 0 &&
 620                     (zoneId.equals("Asia/Amman") ||
 621                      zoneId.equals("Asia/Gaza") ||
 622                      zoneId.equals("Asia/Hebron"))) {
 623                     params[2] = 5;
 624                     params[3] = 86400000;
 625                 }







 626             } else if (nTrans > 0) {  // only do this if there is something in table already
 627                 if (lastyear < LASTYEAR) {
 628                     // ZoneInfo has an ending entry for 2037
 629                     //long trans = OffsetDateTime.of(LASTYEAR, 1, 1, 0, 0, 0, 0,
 630                     //                               ZoneOffset.ofTotalSeconds(rawOffset/1000))
 631                     //                           .toEpochSecond();
 632                     long trans = LDT2037 - rawOffset/1000;
 633 
 634                     int offsetIndex = indexOf(offsets, 0, nOffsets, rawOffset/1000);
 635                     if (offsetIndex == nOffsets)
 636                         nOffsets++;
 637                     transitions[nTrans++] = (trans * 1000) << TRANSITION_NSHIFT |
 638                                        (offsetIndex & OFFSET_MASK);
 639 
 640                 } else if (savingsInstantTransitions.length > 2) {
 641                     // Workaround: create the params based on the last pair for
 642                     // zones like Israel and Iran which have trans defined
 643                     // up until 2037, but no "transition rule" defined
 644                     //
 645                     // Note: Known mismatching for Israel, Asia/Jerusalem/Tel Aviv




 598                     // hacking: see comment above
 599                     if (dom < 0 || dom >= 24) {
 600                         params[6] = -1;
 601                         params[7] = toCalendarDOW[dow];
 602                     } else {
 603                         params[6] = dom;
 604                         params[7] = -toCalendarDOW[dow];
 605                     }
 606                 }
 607                 params[8] = endRule.secondOfDay * 1000;
 608                 params[9] = toSTZTime[endRule.timeDefinition];
 609                 dstSavings = (startRule.offsetAfter - startRule.offsetBefore) * 1000;
 610 
 611                 // Note: known mismatching -> Asia/Amman
 612                 //                            Asia/Gaza
 613                 //                            Asia/Hebron
 614                 // ZoneInfo :      startDayOfWeek=5     <= Thursday
 615                 //                 startTime=86400000   <= 24 hours
 616                 // This:           startDayOfWeek=6
 617                 //                 startTime=0
 618                 // Similar workaround needs to be applied to Africa/Cairo and
 619                 // its endDayOfWeek and endTime
 620                 // Below is the workarounds, it probably slows down everyone a little
 621                 if (params[2] == 6 && params[3] == 0 &&
 622                     (zoneId.equals("Asia/Amman") ||
 623                      zoneId.equals("Asia/Gaza") ||
 624                      zoneId.equals("Asia/Hebron"))) {
 625                     params[2] = 5;
 626                     params[3] = 86400000;
 627                 }
 628                 //endDayOfWeek and endTime workaround
 629                 if (params[7] == 6 && params[8] == 0 &&
 630                     (zoneId.equals("Africa/Cairo"))) {
 631                     params[7] = 5;
 632                     params[8] = 86400000;
 633                 }
 634                 
 635             } else if (nTrans > 0) {  // only do this if there is something in table already
 636                 if (lastyear < LASTYEAR) {
 637                     // ZoneInfo has an ending entry for 2037
 638                     //long trans = OffsetDateTime.of(LASTYEAR, 1, 1, 0, 0, 0, 0,
 639                     //                               ZoneOffset.ofTotalSeconds(rawOffset/1000))
 640                     //                           .toEpochSecond();
 641                     long trans = LDT2037 - rawOffset/1000;
 642 
 643                     int offsetIndex = indexOf(offsets, 0, nOffsets, rawOffset/1000);
 644                     if (offsetIndex == nOffsets)
 645                         nOffsets++;
 646                     transitions[nTrans++] = (trans * 1000) << TRANSITION_NSHIFT |
 647                                        (offsetIndex & OFFSET_MASK);
 648 
 649                 } else if (savingsInstantTransitions.length > 2) {
 650                     // Workaround: create the params based on the last pair for
 651                     // zones like Israel and Iran which have trans defined
 652                     // up until 2037, but no "transition rule" defined
 653                     //
 654                     // Note: Known mismatching for Israel, Asia/Jerusalem/Tel Aviv