/* */ package com.ibm.icu.util; /* */ /* */ import com.ibm.icu.impl.Grego; /* */ import java.util.Date; /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ public class AnnualTimeZoneRule /* */ extends TimeZoneRule /* */ { /* */ private static final long serialVersionUID = -8870666707791230688L; /* */ public static final int MAX_YEAR = Integer.MAX_VALUE; /* */ private final DateTimeRule dateTimeRule; /* */ private final int startYear; /* */ private final int endYear; /* */ /* */ public AnnualTimeZoneRule(String name, int rawOffset, int dstSavings, DateTimeRule dateTimeRule, int startYear, int endYear) /* */ { /* 53 */ super(name, rawOffset, dstSavings); /* 54 */ this.dateTimeRule = dateTimeRule; /* 55 */ this.startYear = startYear; /* 56 */ this.endYear = (endYear > Integer.MAX_VALUE ? Integer.MAX_VALUE : endYear); /* */ } /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ public DateTimeRule getRule() /* */ { /* 68 */ return this.dateTimeRule; /* */ } /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ public int getStartYear() /* */ { /* 80 */ return this.startYear; /* */ } /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ public int getEndYear() /* */ { /* 92 */ return this.endYear; /* */ } /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ public Date getStartInYear(int year, int prevRawOffset, int prevDSTSavings) /* */ { /* 110 */ if ((year < this.startYear) || (year > this.endYear)) { /* 111 */ return null; /* */ } /* */ /* */ /* 115 */ int type = this.dateTimeRule.getDateRuleType(); /* */ long ruleDay; /* 117 */ long ruleDay; if (type == 0) { /* 118 */ ruleDay = Grego.fieldsToDay(year, this.dateTimeRule.getRuleMonth(), this.dateTimeRule.getRuleDayOfMonth()); /* */ } else { /* 120 */ boolean after = true; /* 121 */ if (type == 1) { /* 122 */ int weeks = this.dateTimeRule.getRuleWeekInMonth(); /* 123 */ if (weeks > 0) { /* 124 */ long ruleDay = Grego.fieldsToDay(year, this.dateTimeRule.getRuleMonth(), 1); /* 125 */ ruleDay += 7 * (weeks - 1); /* */ } else { /* 127 */ after = false; /* 128 */ long ruleDay = Grego.fieldsToDay(year, this.dateTimeRule.getRuleMonth(), Grego.monthLength(year, this.dateTimeRule.getRuleMonth())); /* */ /* 130 */ ruleDay += 7 * (weeks + 1); /* */ } /* */ } else { /* 133 */ int month = this.dateTimeRule.getRuleMonth(); /* 134 */ int dom = this.dateTimeRule.getRuleDayOfMonth(); /* 135 */ if (type == 3) { /* 136 */ after = false; /* */ /* 138 */ if ((month == 1) && (dom == 29) && (!Grego.isLeapYear(year))) { /* 139 */ dom--; /* */ } /* */ } /* 142 */ ruleDay = Grego.fieldsToDay(year, month, dom); /* */ } /* */ /* 145 */ int dow = Grego.dayOfWeek(ruleDay); /* 146 */ int delta = this.dateTimeRule.getRuleDayOfWeek() - dow; /* 147 */ if (after) { /* 148 */ delta = delta < 0 ? delta + 7 : delta; /* */ } else { /* 150 */ delta = delta > 0 ? delta - 7 : delta; /* */ } /* 152 */ ruleDay += delta; /* */ } /* */ /* 155 */ long ruleTime = ruleDay * 86400000L + this.dateTimeRule.getRuleMillisInDay(); /* 156 */ if (this.dateTimeRule.getTimeRuleType() != 2) { /* 157 */ ruleTime -= prevRawOffset; /* */ } /* 159 */ if (this.dateTimeRule.getTimeRuleType() == 0) { /* 160 */ ruleTime -= prevDSTSavings; /* */ } /* 162 */ return new Date(ruleTime); /* */ } /* */ /* */ /* */ /* */ /* */ public Date getFirstStart(int prevRawOffset, int prevDSTSavings) /* */ { /* 170 */ return getStartInYear(this.startYear, prevRawOffset, prevDSTSavings); /* */ } /* */ /* */ /* */ /* */ /* */ public Date getFinalStart(int prevRawOffset, int prevDSTSavings) /* */ { /* 178 */ if (this.endYear == Integer.MAX_VALUE) { /* 179 */ return null; /* */ } /* 181 */ return getStartInYear(this.endYear, prevRawOffset, prevDSTSavings); /* */ } /* */ /* */ /* */ /* */ /* */ public Date getNextStart(long base, int prevRawOffset, int prevDSTSavings, boolean inclusive) /* */ { /* 189 */ int[] fields = Grego.timeToFields(base, null); /* 190 */ int year = fields[0]; /* 191 */ if (year < this.startYear) { /* 192 */ return getFirstStart(prevRawOffset, prevDSTSavings); /* */ } /* 194 */ Date d = getStartInYear(year, prevRawOffset, prevDSTSavings); /* 195 */ if ((d != null) && ((d.getTime() < base) || ((!inclusive) && (d.getTime() == base)))) { /* 196 */ d = getStartInYear(year + 1, prevRawOffset, prevDSTSavings); /* */ } /* 198 */ return d; /* */ } /* */ /* */ /* */ /* */ /* */ public Date getPreviousStart(long base, int prevRawOffset, int prevDSTSavings, boolean inclusive) /* */ { /* 206 */ int[] fields = Grego.timeToFields(base, null); /* 207 */ int year = fields[0]; /* 208 */ if (year > this.endYear) { /* 209 */ return getFinalStart(prevRawOffset, prevDSTSavings); /* */ } /* 211 */ Date d = getStartInYear(year, prevRawOffset, prevDSTSavings); /* 212 */ if ((d != null) && ((d.getTime() > base) || ((!inclusive) && (d.getTime() == base)))) { /* 213 */ d = getStartInYear(year - 1, prevRawOffset, prevDSTSavings); /* */ } /* 215 */ return d; /* */ } /* */ /* */ /* */ /* */ /* */ public boolean isEquivalentTo(TimeZoneRule other) /* */ { /* 223 */ if (!(other instanceof AnnualTimeZoneRule)) { /* 224 */ return false; /* */ } /* 226 */ AnnualTimeZoneRule otherRule = (AnnualTimeZoneRule)other; /* 227 */ if ((this.startYear == otherRule.startYear) && (this.endYear == otherRule.endYear) && (this.dateTimeRule.equals(otherRule.dateTimeRule))) /* */ { /* */ /* 230 */ return super.isEquivalentTo(other); /* */ } /* 232 */ return false; /* */ } /* */ /* */ /* */ /* */ /* */ /* */ public boolean isTransitionRule() /* */ { /* 241 */ return true; /* */ } /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ public String toString() /* */ { /* 252 */ StringBuilder buf = new StringBuilder(); /* 253 */ buf.append(super.toString()); /* 254 */ buf.append(", rule={" + this.dateTimeRule + "}"); /* 255 */ buf.append(", startYear=" + this.startYear); /* 256 */ buf.append(", endYear="); /* 257 */ if (this.endYear == Integer.MAX_VALUE) { /* 258 */ buf.append("max"); /* */ } else { /* 260 */ buf.append(this.endYear); /* */ } /* 262 */ return buf.toString(); /* */ } /* */ } /* Location: C:\Users\Ethan\Desktop\FontZip\FontTool\sfnttool.jar!\com\ibm\icu\util\AnnualTimeZoneRule.class * Java compiler version: 5 (49.0) * JD-Core Version: 0.7.1 */