568 dom = endRule.dom;
569 dow = endRule.dow;
570 if (dow == -1) {
571 params[6] = dom;
572 params[7] = 0;
573 } else {
574 // hacking: see comment above
575 if (dom < 0 || dom >= 24) {
576 params[6] = -1;
577 params[7] = toCalendarDOW[dow];
578 } else {
579 params[6] = dom;
580 params[7] = -toCalendarDOW[dow];
581 }
582 }
583 params[8] = endRule.secondOfDay * 1000;
584 params[9] = toSTZTime[endRule.timeDefinition];
585 dstSavings = (startRule.offsetAfter - startRule.offsetBefore) * 1000;
586
587 // Note: known mismatching -> Asia/Amman
588 // ZoneInfo : startDayOfWeek=5 <= Thursday
589 // startTime=86400000 <= 24 hours
590 // This: startDayOfWeek=6
591 // startTime=0
592 // Below is the workaround, it probably slows down everyone a little
593 if (params[2] == 6 && params[3] == 0 && zoneId.equals("Asia/Amman")) {
594 params[2] = 5;
595 params[3] = 86400000;
596 }
597 } else if (nTrans > 0) { // only do this if there is something in table already
598 if (lastyear < LASTYEAR) {
599 // ZoneInfo has an ending entry for 2037
600 //long trans = OffsetDateTime.of(LASTYEAR, 1, 1, 0, 0, 0, 0,
601 // ZoneOffset.ofTotalSeconds(rawOffset/1000))
602 // .toEpochSecond();
603 long trans = LDT2037 - rawOffset/1000;
604
605 int offsetIndex = indexOf(offsets, 0, nOffsets, rawOffset/1000);
606 if (offsetIndex == nOffsets)
607 nOffsets++;
608 transitions[nTrans++] = (trans * 1000) << TRANSITION_NSHIFT |
609 (offsetIndex & OFFSET_MASK);
610
611 } else if (savingsInstantTransitions.length > 2) {
612 // Workaround: create the params based on the last pair for
613 // zones like Israel and Iran which have trans defined
|
568 dom = endRule.dom;
569 dow = endRule.dow;
570 if (dow == -1) {
571 params[6] = dom;
572 params[7] = 0;
573 } else {
574 // hacking: see comment above
575 if (dom < 0 || dom >= 24) {
576 params[6] = -1;
577 params[7] = toCalendarDOW[dow];
578 } else {
579 params[6] = dom;
580 params[7] = -toCalendarDOW[dow];
581 }
582 }
583 params[8] = endRule.secondOfDay * 1000;
584 params[9] = toSTZTime[endRule.timeDefinition];
585 dstSavings = (startRule.offsetAfter - startRule.offsetBefore) * 1000;
586
587 // Note: known mismatching -> Asia/Amman
588 // Asia/Gaza
589 // Asia/Hebron
590 // ZoneInfo : startDayOfWeek=5 <= Thursday
591 // startTime=86400000 <= 24 hours
592 // This: startDayOfWeek=6
593 // startTime=0
594 // Below is the workaround, it probably slows down everyone a little
595 if (params[2] == 6 && params[3] == 0 &&
596 (zoneId.equals("Asia/Amman") ||
597 zoneId.equals("Asia/Gaza") ||
598 zoneId.equals("Asia/Hebron"))) {
599 params[2] = 5;
600 params[3] = 86400000;
601 }
602 } else if (nTrans > 0) { // only do this if there is something in table already
603 if (lastyear < LASTYEAR) {
604 // ZoneInfo has an ending entry for 2037
605 //long trans = OffsetDateTime.of(LASTYEAR, 1, 1, 0, 0, 0, 0,
606 // ZoneOffset.ofTotalSeconds(rawOffset/1000))
607 // .toEpochSecond();
608 long trans = LDT2037 - rawOffset/1000;
609
610 int offsetIndex = indexOf(offsets, 0, nOffsets, rawOffset/1000);
611 if (offsetIndex == nOffsets)
612 nOffsets++;
613 transitions[nTrans++] = (trans * 1000) << TRANSITION_NSHIFT |
614 (offsetIndex & OFFSET_MASK);
615
616 } else if (savingsInstantTransitions.length > 2) {
617 // Workaround: create the params based on the last pair for
618 // zones like Israel and Iran which have trans defined
|