time = tt.getTime();
/** * Find the previous zone transtion near the given time. * * @param base The base time, inclusive. * @return The time of the previous transition, or null if not found. */ private Long getImmediatePreviousZoneTransition(long base) { Long transitionTime = null; if (zone instanceof BasicTimeZone) { TimeZoneTransition transition = ((BasicTimeZone) zone).getPreviousTransition(base, true); if (transition != null) { transitionTime = transition.getTime(); } } else { // Usually, it is enough to check past one hour because such transition is most // likely +1 hour shift. However, there is an example jumped +24 hour in the tz database. transitionTime = getPreviousZoneTransitionTime(zone, base, 2 * 60 * 60 * 1000); // check last 2 hours if (transitionTime == null) { transitionTime = getPreviousZoneTransitionTime(zone, base, 30 * 60 * 60 * 1000); // try last 30 hours } } return transitionTime; }
/** * {@inheritDoc} * @stable ICU 3.8 */ @Override public TimeZoneTransition getPreviousTransition(long base, boolean inclusive) { if (!useDaylight) { return null; } initTransitionRules(); long firstTransitionTime = firstTransition.getTime(); if (base < firstTransitionTime || (!inclusive && base == firstTransitionTime)) { return null; } Date stdDate = stdRule.getPreviousStart(base, dstRule.getRawOffset(), dstRule.getDSTSavings(), inclusive); Date dstDate = dstRule.getPreviousStart(base, stdRule.getRawOffset(), stdRule.getDSTSavings(), inclusive); if (stdDate != null && (dstDate == null || stdDate.after(dstDate))) { return new TimeZoneTransition(stdDate.getTime(), dstRule, stdRule); } if (dstDate != null && (stdDate == null || dstDate.after(stdDate))) { return new TimeZoneTransition(dstDate.getTime(), stdRule, dstRule); } return null; }
long tt = tzt.getTime(); if (inclusive && tt == base) { result = tzt; int idx = historicTransitions.size() - 1; tzt = historicTransitions.get(idx); tt = tzt.getTime(); if (inclusive && tt == base) { result = tzt; while (idx >= 0) { tzt = historicTransitions.get(idx); tt = tzt.getTime(); if (tt < base || (inclusive && tt == base)) { break; && from.getDSTSavings() == to.getDSTSavings()) { result = getPreviousTransition(result.getTime(), false /* always exclusive */);
/** * {@inheritDoc} * @stable ICU 3.8 */ @Override public TimeZoneTransition getNextTransition(long base, boolean inclusive) { if (!useDaylight) { return null; } initTransitionRules(); long firstTransitionTime = firstTransition.getTime(); if (base < firstTransitionTime || (inclusive && base == firstTransitionTime)) { return firstTransition; } Date stdDate = stdRule.getNextStart(base, dstRule.getRawOffset(), dstRule.getDSTSavings(), inclusive); Date dstDate = dstRule.getNextStart(base, stdRule.getRawOffset(), stdRule.getDSTSavings(), inclusive); if (stdDate != null && (dstDate == null || stdDate.before(dstDate))) { return new TimeZoneTransition(stdDate.getTime(), dstRule, stdRule); } if (dstDate != null && (stdDate == null || dstDate.before(stdDate))) { return new TimeZoneTransition(dstDate.getTime(), stdRule, dstRule); } return null; }
TimeZoneTransition result; TimeZoneTransition tzt = historicTransitions.get(0); long tt = tzt.getTime(); if (tt > base || (inclusive && tt == base)) { result = tzt; int idx = historicTransitions.size() - 1; tzt = historicTransitions.get(idx); tt = tzt.getTime(); if (inclusive && tt == base) { result = tzt; while (idx > 0) { tzt = historicTransitions.get(idx); tt = tzt.getTime(); if (tt < base || (!inclusive && tt == base)) { break; return null; } else { result = getNextTransition(result.getTime(), false /* always exclusive */);
private static long getTransitionTime(TimeZoneTransition tzt, boolean local, int NonExistingTimeOpt, int DuplicatedTimeOpt) { long time = tzt.getTime(); if (local) { time += getLocalDelta(tzt.getFrom().getRawOffset(), tzt.getFrom().getDSTSavings(), tzt.getTo().getRawOffset(), tzt.getTo().getDSTSavings(), NonExistingTimeOpt, DuplicatedTimeOpt); } return time; }
&& tr1.getTime() <= end && (tr1.getFrom().getRawOffset() + tr1.getFrom().getDSTSavings() == tr1.getTo().getRawOffset() + tr1.getTo().getDSTSavings()) && (tr1.getFrom().getDSTSavings() != 0 && tr1.getTo().getDSTSavings() != 0)) { tr1 = getNextTransition(tr1.getTime(), false); } else { break; && tr2.getTime() <= end && (tr2.getFrom().getRawOffset() + tr2.getFrom().getDSTSavings() == tr2.getTo().getRawOffset() + tr2.getTo().getDSTSavings()) && (tr2.getFrom().getDSTSavings() != 0 && tr2.getTo().getDSTSavings() != 0)) { tr2 = ((BasicTimeZone)tz).getNextTransition(tr2.getTime(), false); } else { break; boolean inRange2 = false; if (tr1 != null) { if (tr1.getTime() <= end) { inRange1 = true; if (tr2.getTime() <= end) { inRange2 = true; if (tr1.getTime() != tr2.getTime()) { return false; time = tr1.getTime();
TimeZoneTransition before = btz.getPreviousTransition(date, true); if (before != null && (date - before.getTime() < DST_CHECK_RANGE) && before.getFrom().getDSTSavings() != 0) { useStandard = false; TimeZoneTransition after = btz.getNextTransition(date, false); if (after != null && (after.getTime() - date < DST_CHECK_RANGE) && after.getTo().getDSTSavings() != 0) { useStandard = false;
t = tzt.getTime(); String name = tzt.getTo().getName(); boolean isDst = (tzt.getTo().getDSTSavings() != 0); int fromDSTSavings = tzt.getFrom().getDSTSavings(); int toOffset = tzt.getTo().getRawOffset() + tzt.getTo().getDSTSavings(); Grego.timeToFields(tzt.getTime() + fromOffset, dtfields); int weekInMonth = Grego.getDayOfWeekInMonth(dtfields[0], dtfields[1], dtfields[2]); int year = dtfields[0];
startTime = tzt.getTime(); } else { finalZoneWithStartYear = finalZone;
currentRules = getSimpleTimeZoneRulesNear(tzt.getTime() - 1);
long nextTransitionTime = tr.getTime(); if (((tr.getFrom().getDSTSavings() == 0 && tr.getTo().getDSTSavings() != 0) || (tr.getFrom().getDSTSavings() != 0 && tr.getTo().getDSTSavings() == 0)) || (tr.getFrom().getDSTSavings() != 0 && tr.getTo().getDSTSavings() == 0)) && nextTransitionTime + MILLIS_PER_YEAR > tr.getTime()) { dtfields = Grego.timeToFields(tr.getTime() + tr.getFrom().getRawOffset() + tr.getFrom().getDSTSavings(), dtfields); && tr.getTo().getDSTSavings() == 0)) { dtfields = Grego.timeToFields(tr.getTime() + tr.getFrom().getRawOffset() + tr.getFrom().getDSTSavings(), dtfields);