/* */ package com.ibm.icu.util; /* */ /* */ import com.ibm.icu.impl.Grego; /* */ import java.util.BitSet; /* */ import java.util.Date; /* */ import java.util.LinkedList; /* */ import java.util.List; /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ public abstract class BasicTimeZone /* */ extends TimeZone /* */ { /* */ private static final long serialVersionUID = -3204278532246180932L; /* */ private static final long MILLIS_PER_YEAR = 31536000000L; /* */ /** /* */ * @deprecated /* */ */ /* */ public static final int LOCAL_STD = 1; /* */ /** /* */ * @deprecated /* */ */ /* */ public static final int LOCAL_DST = 3; /* */ /** /* */ * @deprecated /* */ */ /* */ public static final int LOCAL_FORMER = 4; /* */ /** /* */ * @deprecated /* */ */ /* */ public static final int LOCAL_LATTER = 12; /* */ /** /* */ * @deprecated /* */ */ /* */ protected static final int STD_DST_MASK = 3; /* */ /** /* */ * @deprecated /* */ */ /* */ protected static final int FORMER_LATTER_MASK = 12; /* */ /* */ public abstract TimeZoneTransition getNextTransition(long paramLong, boolean paramBoolean); /* */ /* */ public abstract TimeZoneTransition getPreviousTransition(long paramLong, boolean paramBoolean); /* */ /* */ public boolean hasEquivalentTransitions(TimeZone tz, long start, long end) /* */ { /* 79 */ return hasEquivalentTransitions(tz, start, end, false); /* */ } /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ public boolean hasEquivalentTransitions(TimeZone tz, long start, long end, boolean ignoreDstAmount) /* */ { /* 105 */ if (hasSameRules(tz)) { /* 106 */ return true; /* */ } /* 108 */ if (!(tz instanceof BasicTimeZone)) { /* 109 */ return false; /* */ } /* */ /* */ /* 113 */ int[] offsets1 = new int[2]; /* 114 */ int[] offsets2 = new int[2]; /* */ /* 116 */ getOffset(start, false, offsets1); /* 117 */ tz.getOffset(start, false, offsets2); /* */ /* 119 */ if (ignoreDstAmount) { /* 120 */ if ((offsets1[0] + offsets1[1] != offsets2[0] + offsets2[1]) || ((offsets1[1] != 0) && (offsets2[1] == 0)) || ((offsets1[1] == 0) && (offsets2[1] != 0))) /* */ { /* */ /* 123 */ return false; /* */ } /* */ } /* 126 */ else if ((offsets1[0] != offsets2[0]) || (offsets1[1] != offsets2[1])) { /* 127 */ return false; /* */ } /* */ /* */ /* */ /* 132 */ long time = start; /* */ for (;;) { /* 134 */ TimeZoneTransition tr1 = getNextTransition(time, false); /* 135 */ TimeZoneTransition tr2 = ((BasicTimeZone)tz).getNextTransition(time, false); /* */ /* 137 */ if (ignoreDstAmount) /* */ { /* */ /* 140 */ while ((tr1 != null) && (tr1.getTime() <= end) && (tr1.getFrom().getRawOffset() + tr1.getFrom().getDSTSavings() == tr1.getTo().getRawOffset() + tr1.getTo().getDSTSavings()) && (tr1.getFrom().getDSTSavings() != 0) && (tr1.getTo().getDSTSavings() != 0)) /* */ { /* */ /* */ /* */ /* 145 */ tr1 = getNextTransition(tr1.getTime(), false); /* */ } /* */ /* */ /* */ /* */ /* 151 */ while ((tr2 != null) && (tr2.getTime() <= end) && (tr2.getFrom().getRawOffset() + tr2.getFrom().getDSTSavings() == tr2.getTo().getRawOffset() + tr2.getTo().getDSTSavings()) && (tr2.getFrom().getDSTSavings() != 0) && (tr2.getTo().getDSTSavings() != 0)) /* */ { /* */ /* */ /* */ /* 156 */ tr2 = ((BasicTimeZone)tz).getNextTransition(tr2.getTime(), false); /* */ } /* */ } /* */ /* */ /* */ /* */ /* 163 */ boolean inRange1 = false; /* 164 */ boolean inRange2 = false; /* 165 */ if ((tr1 != null) && /* 166 */ (tr1.getTime() <= end)) { /* 167 */ inRange1 = true; /* */ } /* */ /* 170 */ if ((tr2 != null) && /* 171 */ (tr2.getTime() <= end)) { /* 172 */ inRange2 = true; /* */ } /* */ /* 175 */ if ((!inRange1) && (!inRange2)) { /* */ break; /* */ } /* */ /* 179 */ if ((!inRange1) || (!inRange2)) { /* 180 */ return false; /* */ } /* 182 */ if (tr1.getTime() != tr2.getTime()) { /* 183 */ return false; /* */ } /* 185 */ if (ignoreDstAmount) { /* 186 */ if ((tr1.getTo().getRawOffset() + tr1.getTo().getDSTSavings() != tr2.getTo().getRawOffset() + tr2.getTo().getDSTSavings()) || ((tr1.getTo().getDSTSavings() != 0) && (tr2.getTo().getDSTSavings() == 0)) || ((tr1.getTo().getDSTSavings() == 0) && (tr2.getTo().getDSTSavings() != 0))) /* */ { /* */ /* */ /* 190 */ return false; /* */ } /* */ } /* 193 */ else if ((tr1.getTo().getRawOffset() != tr2.getTo().getRawOffset()) || (tr1.getTo().getDSTSavings() != tr2.getTo().getDSTSavings())) /* */ { /* 195 */ return false; /* */ } /* */ /* 198 */ time = tr1.getTime(); /* */ } /* 200 */ return true; /* */ } /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ public abstract TimeZoneRule[] getTimeZoneRules(); /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ public TimeZoneRule[] getTimeZoneRules(long start) /* */ { /* 232 */ TimeZoneRule[] all = getTimeZoneRules(); /* 233 */ TimeZoneTransition tzt = getPreviousTransition(start, true); /* 234 */ if (tzt == null) /* */ { /* 236 */ return all; /* */ } /* */ /* 239 */ BitSet isProcessed = new BitSet(all.length); /* 240 */ List<TimeZoneRule> filteredRules = new LinkedList(); /* */ /* */ /* 243 */ TimeZoneRule initial = new InitialTimeZoneRule(tzt.getTo().getName(), tzt.getTo().getRawOffset(), tzt.getTo().getDSTSavings()); /* */ /* 245 */ filteredRules.add(initial); /* 246 */ isProcessed.set(0); /* */ /* */ /* 249 */ for (int i = 1; i < all.length; i++) { /* 250 */ Date d = all[i].getNextStart(start, initial.getRawOffset(), initial.getDSTSavings(), false); /* */ /* 252 */ if (d == null) { /* 253 */ isProcessed.set(i); /* */ } /* */ } /* */ /* 257 */ long time = start; /* 258 */ boolean bFinalStd = false;boolean bFinalDst = false; /* 259 */ while ((!bFinalStd) || (!bFinalDst)) { /* 260 */ tzt = getNextTransition(time, false); /* 261 */ if (tzt == null) { /* */ break; /* */ } /* 264 */ time = tzt.getTime(); /* */ /* 266 */ TimeZoneRule toRule = tzt.getTo(); /* 267 */ for (int ruleIdx = 1; /* 268 */ ruleIdx < all.length; ruleIdx++) { /* 269 */ if (all[ruleIdx].equals(toRule)) { /* */ break; /* */ } /* */ } /* 273 */ if (ruleIdx >= all.length) { /* 274 */ throw new IllegalStateException("The rule was not found"); /* */ } /* 276 */ if (!isProcessed.get(ruleIdx)) /* */ { /* */ /* 279 */ if ((toRule instanceof TimeArrayTimeZoneRule)) { /* 280 */ TimeArrayTimeZoneRule tar = (TimeArrayTimeZoneRule)toRule; /* */ /* */ /* 283 */ long t = start; /* */ for (;;) { /* 285 */ tzt = getNextTransition(t, false); /* 286 */ if (tzt == null) { /* */ break; /* */ } /* 289 */ if (tzt.getTo().equals(tar)) { /* */ break; /* */ } /* 292 */ t = tzt.getTime(); /* */ } /* 294 */ if (tzt != null) /* */ { /* 296 */ Date firstStart = tar.getFirstStart(tzt.getFrom().getRawOffset(), tzt.getFrom().getDSTSavings()); /* */ /* 298 */ if (firstStart.getTime() > start) /* */ { /* 300 */ filteredRules.add(tar); /* */ } /* */ else { /* 303 */ long[] times = tar.getStartTimes(); /* 304 */ int timeType = tar.getTimeType(); /* */ /* 306 */ for (int idx = 0; idx < times.length; idx++) { /* 307 */ t = times[idx]; /* 308 */ if (timeType == 1) { /* 309 */ t -= tzt.getFrom().getRawOffset(); /* */ } /* 311 */ if (timeType == 0) { /* 312 */ t -= tzt.getFrom().getDSTSavings(); /* */ } /* 314 */ if (t > start) { /* */ break; /* */ } /* */ } /* 318 */ int asize = times.length - idx; /* 319 */ if (asize > 0) { /* 320 */ long[] newtimes = new long[asize]; /* 321 */ System.arraycopy(times, idx, newtimes, 0, asize); /* 322 */ TimeArrayTimeZoneRule newtar = new TimeArrayTimeZoneRule(tar.getName(), tar.getRawOffset(), tar.getDSTSavings(), newtimes, tar.getTimeType()); /* */ /* */ /* 325 */ filteredRules.add(newtar); /* */ } /* */ } /* */ } /* 329 */ } else if ((toRule instanceof AnnualTimeZoneRule)) { /* 330 */ AnnualTimeZoneRule ar = (AnnualTimeZoneRule)toRule; /* 331 */ Date firstStart = ar.getFirstStart(tzt.getFrom().getRawOffset(), tzt.getFrom().getDSTSavings()); /* */ /* 333 */ if (firstStart.getTime() == tzt.getTime()) /* */ { /* 335 */ filteredRules.add(ar); /* */ } /* */ else { /* 338 */ int[] dfields = new int[6]; /* 339 */ Grego.timeToFields(tzt.getTime(), dfields); /* */ /* 341 */ AnnualTimeZoneRule newar = new AnnualTimeZoneRule(ar.getName(), ar.getRawOffset(), ar.getDSTSavings(), ar.getRule(), dfields[0], ar.getEndYear()); /* */ /* */ /* 344 */ filteredRules.add(newar); /* */ } /* */ /* 347 */ if (ar.getEndYear() == Integer.MAX_VALUE) /* */ { /* */ /* 350 */ if (ar.getDSTSavings() == 0) { /* 351 */ bFinalStd = true; /* */ } else { /* 353 */ bFinalDst = true; /* */ } /* */ } /* */ } /* 357 */ isProcessed.set(ruleIdx); /* */ } } /* 359 */ TimeZoneRule[] rules = (TimeZoneRule[])filteredRules.toArray(new TimeZoneRule[filteredRules.size()]); /* 360 */ return rules; /* */ } /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ public TimeZoneRule[] getSimpleTimeZoneRulesNear(long date) /* */ { /* 386 */ AnnualTimeZoneRule[] annualRules = null; /* 387 */ TimeZoneRule initialRule = null; /* */ /* 389 */ TimeZoneTransition tr = getNextTransition(date, false); /* 390 */ if (tr != null) { /* 391 */ String initialName = tr.getFrom().getName(); /* 392 */ int initialRaw = tr.getFrom().getRawOffset(); /* 393 */ int initialDst = tr.getFrom().getDSTSavings(); /* */ /* */ /* */ /* 397 */ long nextTransitionTime = tr.getTime(); /* 398 */ if (((tr.getFrom().getDSTSavings() == 0) && (tr.getTo().getDSTSavings() != 0)) || ((tr.getFrom().getDSTSavings() != 0) && (tr.getTo().getDSTSavings() == 0) && (date + 31536000000L > nextTransitionTime))) /* */ { /* */ /* 401 */ annualRules = new AnnualTimeZoneRule[2]; /* */ /* 403 */ int[] dtfields = Grego.timeToFields(nextTransitionTime + tr.getFrom().getRawOffset() + tr.getFrom().getDSTSavings(), null); /* */ /* 405 */ int weekInMonth = Grego.getDayOfWeekInMonth(dtfields[0], dtfields[1], dtfields[2]); /* */ /* 407 */ DateTimeRule dtr = new DateTimeRule(dtfields[1], weekInMonth, dtfields[3], dtfields[5], 0); /* */ /* */ /* 410 */ AnnualTimeZoneRule secondRule = null; /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* 418 */ annualRules[0] = new AnnualTimeZoneRule(tr.getTo().getName(), initialRaw, tr.getTo().getDSTSavings(), dtr, dtfields[0], Integer.MAX_VALUE); /* */ /* */ /* */ /* 422 */ if (tr.getTo().getRawOffset() == initialRaw) /* */ { /* */ /* 425 */ tr = getNextTransition(nextTransitionTime, false); /* 426 */ if (tr != null) /* */ { /* */ /* 429 */ if (((tr.getFrom().getDSTSavings() == 0) && (tr.getTo().getDSTSavings() != 0)) || ((tr.getFrom().getDSTSavings() != 0) && (tr.getTo().getDSTSavings() == 0) && (nextTransitionTime + 31536000000L > tr.getTime()))) /* */ { /* */ /* */ /* */ /* 434 */ dtfields = Grego.timeToFields(tr.getTime() + tr.getFrom().getRawOffset() + tr.getFrom().getDSTSavings(), dtfields); /* */ /* */ /* 437 */ weekInMonth = Grego.getDayOfWeekInMonth(dtfields[0], dtfields[1], dtfields[2]); /* */ /* 439 */ dtr = new DateTimeRule(dtfields[1], weekInMonth, dtfields[3], dtfields[5], 0); /* */ /* 441 */ secondRule = new AnnualTimeZoneRule(tr.getTo().getName(), tr.getTo().getRawOffset(), tr.getTo().getDSTSavings(), dtr, dtfields[0] - 1, Integer.MAX_VALUE); /* */ /* */ /* */ /* 445 */ Date d = secondRule.getPreviousStart(date, tr.getFrom().getRawOffset(), tr.getFrom().getDSTSavings(), true); /* */ /* 447 */ if ((d != null) && (d.getTime() <= date) && (initialRaw == tr.getTo().getRawOffset()) && (initialDst == tr.getTo().getDSTSavings())) /* */ { /* */ /* */ /* 451 */ annualRules[1] = secondRule; /* */ } /* */ } /* */ } /* */ } /* */ /* 457 */ if (annualRules[1] == null) /* */ { /* 459 */ tr = getPreviousTransition(date, true); /* 460 */ if (tr != null) /* */ { /* */ /* 463 */ if (((tr.getFrom().getDSTSavings() == 0) && (tr.getTo().getDSTSavings() != 0)) || ((tr.getFrom().getDSTSavings() != 0) && (tr.getTo().getDSTSavings() == 0))) /* */ { /* */ /* */ /* 467 */ dtfields = Grego.timeToFields(tr.getTime() + tr.getFrom().getRawOffset() + tr.getFrom().getDSTSavings(), dtfields); /* */ /* */ /* 470 */ weekInMonth = Grego.getDayOfWeekInMonth(dtfields[0], dtfields[1], dtfields[2]); /* */ /* 472 */ dtr = new DateTimeRule(dtfields[1], weekInMonth, dtfields[3], dtfields[5], 0); /* */ /* */ /* */ /* */ /* 477 */ secondRule = new AnnualTimeZoneRule(tr.getTo().getName(), initialRaw, initialDst, dtr, annualRules[0].getStartYear() - 1, Integer.MAX_VALUE); /* */ /* */ /* */ /* */ /* */ /* 483 */ Date d = secondRule.getNextStart(date, tr.getFrom().getRawOffset(), tr.getFrom().getDSTSavings(), false); /* */ /* 485 */ if (d.getTime() > nextTransitionTime) /* */ { /* 487 */ annualRules[1] = secondRule; /* */ } /* */ } /* */ } /* */ } /* 492 */ if (annualRules[1] == null) /* */ { /* 494 */ annualRules = null; /* */ } /* */ else { /* 497 */ initialName = annualRules[0].getName(); /* 498 */ initialRaw = annualRules[0].getRawOffset(); /* 499 */ initialDst = annualRules[0].getDSTSavings(); /* */ } /* */ } /* 502 */ initialRule = new InitialTimeZoneRule(initialName, initialRaw, initialDst); /* */ } /* */ else { /* 505 */ tr = getPreviousTransition(date, true); /* 506 */ if (tr != null) { /* 507 */ initialRule = new InitialTimeZoneRule(tr.getTo().getName(), tr.getTo().getRawOffset(), tr.getTo().getDSTSavings()); /* */ } /* */ else /* */ { /* 511 */ int[] offsets = new int[2]; /* 512 */ getOffset(date, false, offsets); /* 513 */ initialRule = new InitialTimeZoneRule(getID(), offsets[0], offsets[1]); /* */ } /* */ } /* */ /* 517 */ TimeZoneRule[] result = null; /* 518 */ if (annualRules == null) { /* 519 */ result = new TimeZoneRule[1]; /* 520 */ result[0] = initialRule; /* */ } else { /* 522 */ result = new TimeZoneRule[3]; /* 523 */ result[0] = initialRule; /* 524 */ result[1] = annualRules[0]; /* 525 */ result[2] = annualRules[1]; /* */ } /* */ /* 528 */ return result; /* */ } /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /** /* */ * @deprecated /* */ */ /* */ public void getOffsetFromLocal(long date, int nonExistingTimeOpt, int duplicatedTimeOpt, int[] offsets) /* */ { /* 586 */ throw new IllegalStateException("Not implemented"); /* */ } /* */ } /* Location: C:\Users\Ethan\Desktop\FontZip\FontTool\sfnttool.jar!\com\ibm\icu\util\BasicTimeZone.class * Java compiler version: 5 (49.0) * JD-Core Version: 0.7.1 */