public ZoneRulesCompat( String version, List<File> sourceFiles, File leapSecondsFile, boolean verbose) { this.compiler = new TzdbZoneRulesCompiler(version, sourceFiles, leapSecondsFile, verbose); compiler.setDeduplicateMap(new HashMap<>()); }
/** * Compile the rules file. * <p> * Use {@link #getZones()} and {@link #getLeapSeconds()} to retrieve the parsed data. * * @throws Exception if an error occurs */ public void compile() throws Exception { printVerbose("Compiling TZDB version " + version); parseFiles(); parseLeapSecondsFile(); buildZoneRules(); printVerbose("Compiled TZDB version " + version); }
TzdbZoneRulesCompiler compiler = new TzdbZoneRulesCompiler(loopVersion, srcFiles, leapSecondsFile, verbose); compiler.setDeduplicateMap(deduplicateMap); try { compiler.compile(); SortedMap<String, ZoneRules> builtZones = compiler.getZones(); SortedMap<LocalDate, Byte> parsedLeapSeconds = compiler.getLeapSeconds(); System.out.println("Outputting file: " + dstFile); outputFile(dstFile, loopVersion, builtZones, parsedLeapSeconds); if (compiler.getMostRecentLeapSecond() != null) { if (bestLeapSeconds == null || compiler.getMostRecentLeapSecond().compareTo(bestLeapSeconds.lastKey()) > 0) { System.out.println("Outputting combined files: " + dstDir); outputFilesDat(dstDir, allBuiltZones, allRegionIds, allRules, bestLeapSeconds); } else { File dstFile = new File(dstDir, "threeten-TZDB-all.jar"); System.out.println("Outputting combined file: " + dstFile); outputFile(dstFile, allBuiltZones, allRegionIds, allRules, bestLeapSeconds);
mdt.month = parseMonth(st.nextToken()); if (st.hasMoreTokens()) { String dayRule = st.nextToken(); if (dayRule.startsWith("last")) { mdt.dayOfMonth = -1; mdt.dayOfWeek = parseDayOfWeek(dayRule.substring(4)); mdt.adjustForwards = false; } else { int index = dayRule.indexOf(">="); if (index > 0) { mdt.dayOfWeek = parseDayOfWeek(dayRule.substring(0, index)); dayRule = dayRule.substring(index + 2); } else { index = dayRule.indexOf("<="); if (index > 0) { mdt.dayOfWeek = parseDayOfWeek(dayRule.substring(0, index)); mdt.adjustForwards = false; dayRule = dayRule.substring(index + 2); int timeOfDaySecs = parseSecs(timeStr); LocalTime time = deduplicate(LocalTime.ofSecondOfDay(Jdk8Methods.floorMod(timeOfDaySecs, 86400))); mdt.time = time; mdt.adjustDays = Jdk8Methods.floorDiv(timeOfDaySecs, 86400); mdt.timeDefinition = parseTimeDefinition(timeStr.charAt(timeStr.length() - 1));
printVerbose("Building zone " + zoneId); zoneId = deduplicate(zoneId); List<TZDBZone> tzdbZones = zones.get(zoneId); ZoneRulesBuilder bld = new ZoneRulesBuilder(); builtZones.put(zoneId, deduplicate(buildRules)); aliasId = deduplicate(aliasId); String realId = links.get(aliasId); printVerbose("Linking alias " + aliasId + " to " + realId); ZoneRules realRules = builtZones.get(realId); if (realRules == null) { printVerbose("Relinking alias " + aliasId + " to " + realId); realRules = builtZones.get(realId); if (realRules == null) {
/** * Outputs the file. */ private static void outputFile(File dstFile, String version, SortedMap<String, ZoneRules> builtZones, SortedMap<LocalDate, Byte> leapSeconds) { Map<String, SortedMap<String, ZoneRules>> loopAllBuiltZones = new TreeMap<String, SortedMap<String, ZoneRules>>(); loopAllBuiltZones.put(version, builtZones); Set<String> loopAllRegionIds = new TreeSet<String>(builtZones.keySet()); Set<ZoneRules> loopAllRules = new HashSet<ZoneRules>(builtZones.values()); outputFile(dstFile, loopAllBuiltZones, loopAllRegionIds, loopAllRules, leapSeconds); }
private LocalDateTime toDateTime(int year) { adjustToFowards(year); LocalDate date; if (dayOfMonth == -1) { dayOfMonth = month.length(Year.isLeap(year)); date = LocalDate.of(year, month, dayOfMonth); if (dayOfWeek != null) { date = date.with(TemporalAdjusters.previousOrSame(dayOfWeek)); } } else { date = LocalDate.of(year, month, dayOfMonth); if (dayOfWeek != null) { date = date.with(TemporalAdjusters.nextOrSame(dayOfWeek)); } } date = deduplicate(date.plusDays(adjustDays)); return LocalDateTime.of(date, time); } }
TzdbZoneRulesCompiler compiler = new TzdbZoneRulesCompiler(loopVersion, srcFiles, leapSecondsFile, verbose); compiler.setDeduplicateMap(deduplicateMap); try { compiler.compile(); SortedMap<String, ZoneRules> builtZones = compiler.getZones(); SortedMap<LocalDate, Byte> parsedLeapSeconds = compiler.getLeapSeconds(); System.out.println("Outputting file: " + dstFile); outputFile(dstFile, loopVersion, builtZones, parsedLeapSeconds); if (compiler.getMostRecentLeapSecond() != null) { if (bestLeapSeconds == null || compiler.getMostRecentLeapSecond().compareTo(bestLeapSeconds.lastKey()) > 0) { System.out.println("Outputting combined files: " + dstDir); outputFilesDat(dstDir, allBuiltZones, allRegionIds, allRules, bestLeapSeconds); } else { File dstFile = new File(dstDir, "threeten-TZDB-all.jar"); System.out.println("Outputting combined file: " + dstFile); outputFile(dstFile, allBuiltZones, allRegionIds, allRules, bestLeapSeconds);
mdt.month = parseMonth(st.nextToken()); if (st.hasMoreTokens()) { String dayRule = st.nextToken(); if (dayRule.startsWith("last")) { mdt.dayOfMonth = -1; mdt.dayOfWeek = parseDayOfWeek(dayRule.substring(4)); mdt.adjustForwards = false; } else { int index = dayRule.indexOf(">="); if (index > 0) { mdt.dayOfWeek = parseDayOfWeek(dayRule.substring(0, index)); dayRule = dayRule.substring(index + 2); } else { index = dayRule.indexOf("<="); if (index > 0) { mdt.dayOfWeek = parseDayOfWeek(dayRule.substring(0, index)); mdt.adjustForwards = false; dayRule = dayRule.substring(index + 2); int timeOfDaySecs = parseSecs(timeStr); LocalTime time = deduplicate(LocalTime.ofSecondOfDay(Jdk8Methods.floorMod(timeOfDaySecs, 86400))); mdt.time = time; mdt.adjustDays = Jdk8Methods.floorDiv(timeOfDaySecs, 86400); mdt.timeDefinition = parseTimeDefinition(timeStr.charAt(timeStr.length() - 1));
printVerbose("Building zone " + zoneId); zoneId = deduplicate(zoneId); List<TZDBZone> tzdbZones = zones.get(zoneId); ZoneRulesBuilder bld = new ZoneRulesBuilder(); builtZones.put(zoneId, deduplicate(buildRules)); aliasId = deduplicate(aliasId); String realId = links.get(aliasId); printVerbose("Linking alias " + aliasId + " to " + realId); ZoneRules realRules = builtZones.get(realId); if (realRules == null) { printVerbose("Relinking alias " + aliasId + " to " + realId); realRules = builtZones.get(realId); if (realRules == null) {
/** * Outputs the file. */ private static void outputFile(File dstFile, String version, SortedMap<String, ZoneRules> builtZones, SortedMap<LocalDate, Byte> leapSeconds) { Map<String, SortedMap<String, ZoneRules>> loopAllBuiltZones = new TreeMap<String, SortedMap<String, ZoneRules>>(); loopAllBuiltZones.put(version, builtZones); Set<String> loopAllRegionIds = new TreeSet<String>(builtZones.keySet()); Set<ZoneRules> loopAllRules = new HashSet<ZoneRules>(builtZones.values()); outputFile(dstFile, loopAllBuiltZones, loopAllRegionIds, loopAllRules, leapSeconds); }
private LocalDateTime toDateTime(int year) { adjustToFowards(year); LocalDate date; if (dayOfMonth == -1) { dayOfMonth = month.length(Year.isLeap(year)); date = LocalDate.of(year, month, dayOfMonth); if (dayOfWeek != null) { date = date.with(TemporalAdjusters.previousOrSame(dayOfWeek)); } } else { date = LocalDate.of(year, month, dayOfMonth); if (dayOfWeek != null) { date = date.with(TemporalAdjusters.nextOrSame(dayOfWeek)); } } date = deduplicate(date.plusDays(adjustDays)); return LocalDateTime.of(date, time); } }
/** * Compile the rules file. * <p> * Use {@link #getZones()} and {@link #getLeapSeconds()} to retrieve the parsed data. * * @throws Exception if an error occurs */ public void compile() throws Exception { printVerbose("Compiling TZDB version " + version); parseFiles(); parseLeapSecondsFile(); buildZoneRules(); printVerbose("Compiled TZDB version " + version); }
private Month parseMonth(String str) { str = str.toLowerCase(); for (Month moy : Month.values()) { if (matches(str, moy.name().toLowerCase())) { return moy; } } throw new IllegalArgumentException("Unknown month: " + str); }
private DayOfWeek parseDayOfWeek(String str) { str = str.toLowerCase(); for (DayOfWeek dow : DayOfWeek.values()) { if (matches(str, dow.name().toLowerCase())) { return dow; } } throw new IllegalArgumentException("Unknown day-of-week: " + str); }
private Month parseMonth(String str) { str = str.toLowerCase(); for (Month moy : Month.values()) { if (matches(str, moy.name().toLowerCase())) { return moy; } } throw new IllegalArgumentException("Unknown month: " + str); }
private DayOfWeek parseDayOfWeek(String str) { str = str.toLowerCase(); for (DayOfWeek dow : DayOfWeek.values()) { if (matches(str, dow.name().toLowerCase())) { return dow; } } throw new IllegalArgumentException("Unknown day-of-week: " + str); }