< prev index next >

make/src/classes/build/tools/tzdb/TzdbZoneRulesProvider.java

Print this page




 701 
 702         // first stanard offset
 703         ZoneOffset firstStdOffset = stdOffset;
 704         // first wall offset
 705         ZoneOffset firstWallOffset = wallOffset;
 706 
 707         for (ZoneLine zone : zones) {
 708             // check if standard offset changed, update it if yes
 709             ZoneOffset stdOffsetPrev = stdOffset;  // for effectiveSavings check
 710             if (zone.stdOffsetSecs != stdOffset.getTotalSeconds()) {
 711                 ZoneOffset stdOffsetNew = ZoneOffset.ofTotalSeconds(zone.stdOffsetSecs);
 712                 standardTransitionList.add(
 713                     ZoneOffsetTransition.of(
 714                         LocalDateTime.ofEpochSecond(zoneStart.toEpochSecond(wallOffset),
 715                                                     0,
 716                                                     stdOffset),
 717                         stdOffset,
 718                         stdOffsetNew));
 719                 stdOffset = stdOffsetNew;
 720             }
 721 
 722             LocalDateTime zoneEnd;
 723             if (zone.year == Year.MAX_VALUE) {
 724                 zoneEnd = LocalDateTime.MAX;
 725             } else {
 726                 zoneEnd = zone.toDateTime();
 727             }
 728             if (zoneEnd.compareTo(zoneStart) < 0) {
 729                 throw new IllegalStateException("Windows must be in date-time order: " +
 730                         zoneEnd + " < " + zoneStart);
 731             }
 732             // calculate effective savings at the start of the window
 733             List<TransRule> trules = null;
 734             List<TransRule> lastRules = null;
 735 
 736             int effectiveSavings = zone.fixedSavingsSecs;

 737             if (zone.savingsRule != null) {
 738                 List<RuleLine> tzdbRules = rules.get(zone.savingsRule);
 739                 if (tzdbRules == null) {
 740                    throw new IllegalArgumentException("<Rule> not found: " +
 741                                                        zone.savingsRule);
 742                 }
 743                 trules = new ArrayList<>(256);
 744                 lastRules = new ArrayList<>(2);
 745                 int lastRulesStartYear = Year.MIN_VALUE;
 746 
 747                 // merge the rules to transitions
 748                 for (RuleLine rule : tzdbRules) {
 749                     if (rule.startYear > zoneEnd.getYear()) {
 750                         // rules will not be used for this zone entry
 751                         continue;
 752                     }
 753                     rule.adjustToForwards(2004);  // irrelevant, treat as leap year
 754 
 755                     int startYear = rule.startYear;
 756                     int endYear = rule.endYear;
 757                     if (zoneEnd.equals(LocalDateTime.MAX)) {
 758                         if (endYear == Year.MAX_VALUE) {
 759                             endYear = startYear;
 760                             lastRules.add(new TransRule(endYear, rule));
 761                             lastRulesStartYear = Math.max(startYear, lastRulesStartYear);
 762                         }


 763                     } else {
 764                         if (endYear == Year.MAX_VALUE) {
 765                             //endYear = zoneEnd.getYear();
 766                             endYear = zone.year;
 767                         }
 768                     }
 769                     int year = startYear;
 770                     while (year <= endYear) {
 771                         trules.add(new TransRule(year, rule));
 772                         year++;
 773                     }
 774                 }
 775 
 776                 // last rules, fill the gap years between different last rules
 777                 if (zoneEnd.equals(LocalDateTime.MAX)) {
 778                     lastRulesStartYear = Math.max(lastRulesStartYear, zoneStart.getYear()) + 1;
 779                     for (TransRule rule : lastRules) {
 780                         if (rule.year <= lastRulesStartYear) {
 781                             int year = rule.year;
 782                             while (year <= lastRulesStartYear) {




 701 
 702         // first stanard offset
 703         ZoneOffset firstStdOffset = stdOffset;
 704         // first wall offset
 705         ZoneOffset firstWallOffset = wallOffset;
 706 
 707         for (ZoneLine zone : zones) {
 708             // check if standard offset changed, update it if yes
 709             ZoneOffset stdOffsetPrev = stdOffset;  // for effectiveSavings check
 710             if (zone.stdOffsetSecs != stdOffset.getTotalSeconds()) {
 711                 ZoneOffset stdOffsetNew = ZoneOffset.ofTotalSeconds(zone.stdOffsetSecs);
 712                 standardTransitionList.add(
 713                     ZoneOffsetTransition.of(
 714                         LocalDateTime.ofEpochSecond(zoneStart.toEpochSecond(wallOffset),
 715                                                     0,
 716                                                     stdOffset),
 717                         stdOffset,
 718                         stdOffsetNew));
 719                 stdOffset = stdOffsetNew;
 720             }

 721             LocalDateTime zoneEnd;
 722             if (zone.year == Year.MAX_VALUE) {
 723                 zoneEnd = LocalDateTime.MAX;
 724             } else {
 725                 zoneEnd = zone.toDateTime();
 726             }
 727             if (zoneEnd.compareTo(zoneStart) < 0) {
 728                 throw new IllegalStateException("Windows must be in date-time order: " +
 729                         zoneEnd + " < " + zoneStart);
 730             }
 731             // calculate effective savings at the start of the window
 732             List<TransRule> trules = null;
 733             List<TransRule> lastRules = null;
 734 
 735             int effectiveSavings = zone.fixedSavingsSecs;
 736 
 737             if (zone.savingsRule != null) {
 738                 List<RuleLine> tzdbRules = rules.get(zone.savingsRule);
 739                 if (tzdbRules == null) {
 740                    throw new IllegalArgumentException("<Rule> not found: " +
 741                                                        zone.savingsRule);
 742                 }
 743                 trules = new ArrayList<>(256);
 744                 lastRules = new ArrayList<>(2);
 745                 int lastRulesStartYear = Year.MIN_VALUE;
 746 
 747                 // merge the rules to transitions
 748                 for (RuleLine rule : tzdbRules) {
 749                     if (rule.startYear > zoneEnd.getYear()) {
 750                         // rules will not be used for this zone entry
 751                         continue;
 752                     }
 753                     rule.adjustToForwards(2004);  // irrelevant, treat as leap year
 754 
 755                     int startYear = rule.startYear;
 756                     int endYear = rule.endYear;
 757                     if (zoneEnd.equals(LocalDateTime.MAX)) {
 758                         if (endYear == Year.MAX_VALUE) {
 759                             endYear = startYear;
 760                             lastRules.add(new TransRule(endYear, rule));

 761                         }
 762                         lastRulesStartYear = Math.max(startYear, lastRulesStartYear);
 763 
 764                     } else {
 765                         if (endYear == Year.MAX_VALUE) {
 766                             //endYear = zoneEnd.getYear();
 767                             endYear = zone.year;
 768                         }
 769                     }
 770                     int year = startYear;
 771                     while (year <= endYear) {
 772                         trules.add(new TransRule(year, rule));
 773                         year++;
 774                     }
 775                 }
 776 
 777                 // last rules, fill the gap years between different last rules
 778                 if (zoneEnd.equals(LocalDateTime.MAX)) {
 779                     lastRulesStartYear = Math.max(lastRulesStartYear, zoneStart.getYear()) + 1;
 780                     for (TransRule rule : lastRules) {
 781                         if (rule.year <= lastRulesStartYear) {
 782                             int year = rule.year;
 783                             while (year <= lastRulesStartYear) {


< prev index next >