/** *Getsallrulerecordsthatcoverthegivenyear. * *@paramyeartheyearnumberforwhichtheruleisapplicable. *@returnrulesinListthatarecollatedintime.Ifnoruleisfound,anempty *Listisreturned.
*/
List<RuleRec> getRules(int year) {
List<RuleRec> rules = new ArrayList<RuleRec>(3); for (RuleRec rec : list) { if (year >= rec.getFromYear() && year <= rec.getToYear()) { if ((rec.isOdd() && year % 2 == 0) || (rec.isEven() && year % 2 == 1)) continue;
rules.add(rec);
}
} int n = rules.size(); if (n <= 1) { return rules;
} if (n == 2) {
RuleRec rec1 = rules.get(0);
RuleRec rec2 = rules.get(1); if (rec1.getMonthNum() > rec2.getMonthNum()) {
rules.set(0, rec2);
rules.set(1, rec1);
} elseif (rec1.getMonthNum() == rec2.getMonthNum()) { // TODO: it's not accurate to ignore time types (STD, WALL, UTC) long t1 = Time.getLocalTime(year, rec1.getMonth(),
rec1.getDay(), rec1.getTime().getTime()); long t2 = Time.getLocalTime(year, rec2.getMonth(),
rec2.getDay(), rec2.getTime().getTime()); if (t1 > t2) {
rules.set(0, rec2);
rules.set(1, rec1);
}
} return rules;
}
finalint y = year;
RuleRec[] recs = new RuleRec[rules.size()];
rules.toArray(recs);
Arrays.sort(recs, new Comparator<RuleRec>() { publicint compare(RuleRec r1, RuleRec r2) { int n = r1.getMonthNum() - r2.getMonthNum(); if (n != 0) { return n;
} // TODO: it's not accurate to ignore time types (STD, WALL, UTC) long t1 = Time.getLocalTime(y, r1.getMonth(),
r1.getDay(), r1.getTime().getTime()); long t2 = Time.getLocalTime(y, r2.getMonth(),
r2.getDay(), r2.getTime().getTime()); returnLong.compare(t1, t2);
} publicboolean equals(Object o) { returnthis == o;
}
});
rules.clear(); for (int i = 0; i < n; i++) { if (i != 0 && recs[i -1].getSave() == recs[i].getSave()) { // we have two recs back to back with same saving for the same year. if (recs[i].isLastRule()) { continue;
} elseif (recs[i - 1].isLastRule()) {
rules.remove(rules.size() - 1);
}
}
rules.add(recs[i]);
} return rules;
}
for (int i = 0; i < list.size(); i++) {
RuleRec rec = list.get(i); if (rec.isLastRule()) { if (rec.getSave() > 0) {
start = rec;
} else {
end = rec;
}
}
} if (start == null || end == null) { int endYear = Zoneinfo.getEndYear(); for (int i = 0; i < list.size(); i++) {
RuleRec rec = list.get(i); if (endYear >= rec.getFromYear() && endYear <= rec.getToYear()) { if (start == null && rec.getSave() > 0) {
start = rec;
} else { if (end == null && rec.getSave() == 0) {
end = rec;
}
}
}
}
}
List<RuleRec> r = new ArrayList<RuleRec>(2); if (start == null || end == null) { if (start != null || end != null) {
Main.warning("found last rules for "+name+" inconsistent.");
} return r;
}
r.add(start);
r.add(end); return r;
}
}
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.15 Sekunden
(vorverarbeitet am 2026-06-10)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.