Example usage for org.joda.time DateTimeZone nextTransition

List of usage examples for org.joda.time DateTimeZone nextTransition

Introduction

In this page you can find the example usage for org.joda.time DateTimeZone nextTransition.

Prototype

public abstract long nextTransition(long instant);

Source Link

Document

Advances the given instant to where the time zone offset or name changes.

Usage

From source file:nodatime.jodadump.JodaDump.java

License:Open Source License

private static void dumpZone(String id, DateTimeZone zone) {
    // TODO: Reinstate this when Noda Time understands aliases better.
    // See issue 32 for more details.
    // if (!id.equals(zone.getID())) {
    //    System.out.println(id + " == " + zone.getID());
    //    System.out.println();
    //    return;
    // }//from  w w  w.  j  ava2s. c o m
    System.out.println(id);
    long now = START.getMillis();
    while (now < END.getMillis()) {
        int standardOffset = zone.getStandardOffset(now);
        int wallOffset = zone.getOffset(now);

        System.out.printf("%s  %s  %s%n", INSTANT_FORMAT.print(now), printOffset(standardOffset),
                printOffset(wallOffset - standardOffset));
        // TODO: Output the name when we've got parity in handling
        // of auto-addition for summer/winter in Noda Time.
        long next = zone.nextTransition(now);
        if (next <= now) {
            break;
        }
        now = next;
    }
    System.out.println();
}

From source file:org.elasticsearch.search.aggregations.bucket.histogram.DateHistogramAggregationBuilder.java

License:Apache License

DateTimeZone rewriteTimeZone(QueryShardContext context) throws IOException {
    final DateTimeZone tz = timeZone();
    if (field() != null && tz != null && tz.isFixed() == false && field() != null && script() == null) {
        final MappedFieldType ft = context.fieldMapper(field());
        final IndexReader reader = context.getIndexReader();
        if (ft != null && reader != null) {
            Long anyInstant = null;
            final IndexNumericFieldData fieldData = context.getForField(ft);
            for (LeafReaderContext ctx : reader.leaves()) {
                AtomicNumericFieldData leafFD = fieldData.load(ctx);
                SortedNumericDocValues values = leafFD.getLongValues();
                if (values.nextDoc() != DocIdSetIterator.NO_MORE_DOCS) {
                    anyInstant = values.nextValue();
                    break;
                }//  ww w .  j a v  a  2  s . c  om
            }

            if (anyInstant != null) {
                final long prevTransition = tz.previousTransition(anyInstant);
                final long nextTransition = tz.nextTransition(anyInstant);

                // We need all not only values but also rounded values to be within
                // [prevTransition, nextTransition].
                final long low;
                DateTimeUnit intervalAsUnit = getIntervalAsDateTimeUnit();
                if (intervalAsUnit != null) {
                    final DateTimeField dateTimeField = intervalAsUnit.field(tz);
                    low = dateTimeField.roundCeiling(prevTransition);
                } else {
                    final TimeValue intervalAsMillis = getIntervalAsTimeValue();
                    low = Math.addExact(prevTransition, intervalAsMillis.millis());
                }
                // rounding rounds down, so 'nextTransition' is a good upper bound
                final long high = nextTransition;

                if (ft.isFieldWithinQuery(reader, low, high, true, false, DateTimeZone.UTC, EPOCH_MILLIS_PARSER,
                        context) == Relation.WITHIN) {
                    // All values in this reader have the same offset despite daylight saving times.
                    // This is very common for location-based timezones such as Europe/Paris in
                    // combination with time-based indices.
                    return DateTimeZone.forOffsetMillis(tz.getOffset(anyInstant));
                }
            }
        }
    }
    return tz;
}

From source file:org.nodatime.tzvalidate.JodaDump.java

License:Open Source License

@Override
public ZoneTransitions getTransitions(String id, int fromYear, int toYear) {
    DateTimeZone zone = zones.get(id);
    // Note that the ID we fetched isn't always the same as DateTimeZone.getID()
    DateTimeFormatter nameFormatter = DateTimeFormat.forPattern("zz").withZone(zone);

    Instant start = new DateTime(fromYear, 1, 1, 0, 0, DateTimeZone.UTC).toInstant();
    Instant end = new DateTime(toYear, 1, 1, 0, 0, DateTimeZone.UTC).toInstant();
    ZoneTransitions transitions = new ZoneTransitions(id);
    long now = start.getMillis();
    transitions.addTransition(null, zone.getOffset(now), !zone.isStandardOffset(now), nameFormatter.print(now));

    now = zone.nextTransition(now);
    if (now == start.getMillis()) {
        return transitions;
    }//from   w  ww .ja  v  a2 s  .c om
    while (now < end.getMillis()) {
        transitions.addTransition(new Date(now), zone.getOffset(now), !zone.isStandardOffset(now),
                nameFormatter.print(now));
        long next = zone.nextTransition(now);
        if (next <= now) {
            break;
        }
        now = next;
    }
    return transitions;
}

From source file:org.obm.push.protocol.data.TimeZoneConverterImpl.java

License:Open Source License

private ASSystemTime standardDate(TimeZone timeZone) {
    DateTimeZone dateTimeZone = DateTimeZone.forTimeZone(timeZone);

    DateMidnight dateMidnight = new DateMidnight(DateTimeUtils.getInstantMillis(null), dateTimeZone);

    long firstDSTTransitionInstant = dateTimeZone.nextTransition(dateMidnight.getMillis());
    long secondDSTTransitionInstant = dateTimeZone.nextTransition(firstDSTTransitionInstant);

    if (firstDSTTransitionInstant == secondDSTTransitionInstant) {
        return systemTimeFromInstant(0, DateTimeZone.UTC);
    }// ww  w .  ja  v  a2s . c  om

    if (dateTimeZone.isStandardOffset(firstDSTTransitionInstant)) {
        return systemTimeFromInstant(firstDSTTransitionInstant, dateTimeZone);
    }
    return systemTimeFromInstant(secondDSTTransitionInstant, dateTimeZone);
}

From source file:org.obm.push.protocol.data.TimeZoneConverterImpl.java

License:Open Source License

private ASSystemTime dayLightDate(TimeZone timeZone) {
    DateTimeZone dateTimeZone = DateTimeZone.forTimeZone(timeZone);

    DateMidnight dateMidnight = new DateMidnight(DateTimeUtils.getInstantMillis(null), dateTimeZone);

    long firstDSTTransitionInstant = dateTimeZone.nextTransition(dateMidnight.getMillis());
    long secondDSTTransitionInstant = dateTimeZone.nextTransition(firstDSTTransitionInstant);

    if (firstDSTTransitionInstant == secondDSTTransitionInstant) {
        return systemTimeFromInstant(0, DateTimeZone.UTC);
    }/*from   w  ww  .ja v  a2  s  .c  om*/

    if (dateTimeZone.isStandardOffset(firstDSTTransitionInstant)) {
        return systemTimeFromInstant(secondDSTTransitionInstant, dateTimeZone);
    }
    return systemTimeFromInstant(firstDSTTransitionInstant, dateTimeZone);
}

From source file:org.teavm.classlib.impl.tz.ZoneInfoCompiler.java

License:Apache License

/**
 * @return false if error.//from w w  w .  j a  v  a 2  s  .com
 */
static boolean test(String id, DateTimeZone tz) {
    if (!id.equals(tz.getID())) {
        return true;
    }

    // Test to ensure that reported transitions are not duplicated.

    long millis = ISOChronology.getInstanceUTC().year().set(0, 1850);
    long end = ISOChronology.getInstanceUTC().year().set(0, 2050);

    int offset = tz.getOffset(millis);

    List<Long> transitions = new ArrayList<>();

    while (true) {
        long next = tz.nextTransition(millis);
        if (next == millis || next > end) {
            break;
        }

        millis = next;

        int nextOffset = tz.getOffset(millis);

        if (offset == nextOffset) {
            System.out.println(
                    "*d* Error in " + tz.getID() + " " + new DateTime(millis, ISOChronology.getInstanceUTC()));
            return false;
        }

        transitions.add(Long.valueOf(millis));

        offset = nextOffset;
    }

    // Now verify that reverse transitions match up.

    millis = ISOChronology.getInstanceUTC().year().set(0, 2050);
    end = ISOChronology.getInstanceUTC().year().set(0, 1850);

    for (int i = transitions.size(); --i >= 0;) {
        long prev = tz.previousTransition(millis);
        if (prev == millis || prev < end) {
            break;
        }

        millis = prev;

        long trans = transitions.get(i).longValue();

        if (trans - 1 != millis) {
            System.out.println(
                    "*r* Error in " + tz.getID() + " " + new DateTime(millis, ISOChronology.getInstanceUTC())
                            + " != " + new DateTime(trans - 1, ISOChronology.getInstanceUTC()));

            return false;
        }
    }

    return true;
}

From source file:org.thelq.pircbotx.commands.NewYearsCommand.java

License:Open Source License

public static String getUTCOffset(DateTimeZone tz) {
    long millis = System.currentTimeMillis();
    while (tz.getOffset(millis) != tz.getStandardOffset(millis)) {
        long next = tz.nextTransition(millis);
        if (next == millis)
            break;
        millis = next;//from  ww  w  .j  av a2 s  .com
    }
    return "UTC" + FORMATTER_TZOFFSET.withZone(tz).print(millis);
}

From source file:org.unitime.timetable.server.ServerTimeZoneBackend.java

License:Open Source License

@Override
public ServerTimeZoneResponse execute(ServerTimeZoneRequest request, SessionContext context) {
    Date first = null, last = null;
    for (Session session : SessionDAO.getInstance().findAll()) {
        if (first == null || first.after(session.getEventBeginDate()))
            first = session.getEventBeginDate();
        if (last == null || last.before(session.getEventEndDate()))
            last = session.getEventEndDate();
    }//from  w  w w  . j av  a2 s  .c  om
    DateTimeZone zone = DateTimeZone.getDefault();
    int offsetInMinutes = zone.getOffset(first.getTime()) / 60000;
    ServerTimeZoneResponse ret = new ServerTimeZoneResponse();
    ret.setId(zone.getID());
    ret.addName(zone.getName(new Date().getTime()));
    ret.setTimeZoneOffsetInMinutes(offsetInMinutes);
    long time = first.getTime();
    long transition;
    while (time != (transition = zone.nextTransition(time)) && time < last.getTime()) {
        int adjustment = (zone.getOffset(transition) / 60000) - offsetInMinutes;
        ret.addTransition((int) (transition / 3600000), adjustment);
        time = transition;
    }
    return ret;
}