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
|