Granularity create(DateTime origin, DateTimeZone tz) { if (period != null && (origin != null || tz != null)) { return new PeriodGranularity(period, origin, tz); } else { // If All or None granularity, or if origin and tz are both null, return the cached granularity return defaultGranularity; } }
@Test public void testTruncateDhaka() { final DateTimeZone tz = DateTimeZone.forTimeZone(TimeZone.getTimeZone("Asia/Dhaka")); final DateTime date = new DateTime("2011-03-15T21:42:23.898+06:00", tz); final PeriodGranularity year = new PeriodGranularity(new Period("P1Y"), null, tz); final PeriodGranularity hour = new PeriodGranularity(new Period("PT1H"), null, tz); final PeriodGranularity twoHour = new PeriodGranularity(new Period("PT2H"), null, tz); Assert.assertEquals( new DateTime("2011-01-01T00:00:00.000+06:00", tz), year.toDateTime(year.bucketStart(date).getMillis()) ); Assert.assertEquals( new DateTime("2011-03-15T21:00:00.000+06:00", tz), hour.toDateTime(hour.bucketStart(date).getMillis()) ); Assert.assertEquals( new DateTime("2011-03-15T20:00:00.000+06:00", tz), twoHour.toDateTime(twoHour.bucketStart(date).getMillis()) ); }
@Override public String toString() { return "{type=period, " + "period=" + getPeriod() + ", timeZone=" + getTimeZone() + ", origin=" + getOrigin() + '}'; }
@Override public DateTime increment(DateTime time) { return new DateTime(increment(time.getMillis()), getTimeZone()); }
@Override public DateTime bucketStart(DateTime time) { return new DateTime(truncate(time.getMillis()), getTimeZone()); }
PeriodGranularity periodOrigin = new PeriodGranularity( new Period("P2D"), origin, ), Lists.newArrayList( periodOrigin.bucketStart(DateTimes.of("2012-01-01T05:00:04.123-08:00")), periodOrigin.bucketStart(DateTimes.of("2012-01-02T07:00:04.123-08:00")), periodOrigin.bucketStart(DateTimes.of("2012-01-04T07:20:04.123-08:00")) PeriodGranularity periodNoOrigin = new PeriodGranularity( new Period("P2D"), null, ), Lists.newArrayList( periodNoOrigin.bucketStart(DateTimes.of("2012-01-01T05:00:04.123-08:00")), periodNoOrigin.bucketStart(DateTimes.of("2012-01-02T07:00:04.123-08:00")), periodNoOrigin.bucketStart(DateTimes.of("2012-01-04T07:20:04.123-08:00"))
private static Iterable<Interval> splitInterval(Interval interval, Period period) { if (interval.getEndMillis() == interval.getStartMillis()) { return Collections.singletonList(interval); } List<Interval> intervals = new ArrayList<>(); Iterator<Interval> timestamps = new PeriodGranularity(period, null, null).getIterable(interval).iterator(); DateTime start = DateTimes.max(timestamps.next().getStart(), interval.getStart()); while (timestamps.hasNext()) { DateTime end = timestamps.next().getStart(); intervals.add(new Interval(start, end)); start = end; } if (start.compareTo(interval.getEnd()) < 0) { intervals.add(new Interval(start, interval.getEnd())); } return intervals; }
new DateTime("2012-11-06T00:00:00.000-08:00", tz) ), new PeriodGranularity(new Period("P1D"), null, tz) .getIterable(new Interval(baseTime, baseTime.plus(Days.days(3)))) ); new DateTime("2012-11-04T03:00:00.000-08:00", tz) ), new PeriodGranularity(new Period("PT1H"), null, tz) .getIterable(new Interval(baseTime, baseTime.plus(Hours.hours(5)))) ); final PeriodGranularity hour = new PeriodGranularity(new Period("PT1H"), null, tz); assertSameDateTime( Lists.newArrayList( ), Lists.newArrayList( hour.bucketStart(DateTimes.of("2012-11-04T00:30:00-07:00")), hour.bucketStart(DateTimes.of("2012-11-04T01:30:00-07:00")), hour.bucketStart(DateTimes.of("2012-11-04T01:30:00-08:00")), hour.bucketStart(DateTimes.of("2012-11-04T02:30:00-08:00")), hour.bucketStart(DateTimes.of("2012-11-04T03:30:00-08:00"))
PeriodGranularity granularity = new PeriodGranularity( period, provisioningSchedulerConfig.getOriginTime(), null ); final long startTime = granularity.bucketEnd(DateTimes.nowUtc()).getMillis();
public TimestampShiftExpr(final List<Expr> args) { final PeriodGranularity granularity = getGranularity(args, ExprUtils.nilBindings()); arg = args.get(0); period = granularity.getPeriod(); chronology = ISOChronology.getInstance(granularity.getTimeZone()); step = getStep(args, ExprUtils.nilBindings()); }
public static List<Granularity> granularitiesFinerThan(final Granularity gran0) { final List<Granularity> retVal = new ArrayList<>(); final DateTime origin = (gran0 instanceof PeriodGranularity) ? ((PeriodGranularity) gran0).getOrigin() : null; final DateTimeZone tz = (gran0 instanceof PeriodGranularity) ? ((PeriodGranularity) gran0).getTimeZone() : null; for (GranularityType gran : GranularityType.values()) { /** * All and None are excluded b/c when asked to give all granularities finer * than "TEN_MINUTE", you want the answer to be "FIVE_MINUTE, MINUTE and SECOND" * it doesn't make sense to include ALL or None to be part of this. */ if (gran == GranularityType.ALL || gran == GranularityType.NONE) { continue; } final Granularity segmentGranularity = gran.create(origin, tz); final long segmentGranularityDurationMillis = segmentGranularity.bucket(DateTimes.EPOCH).toDurationMillis(); final long gran0DurationMillis = gran0.bucket(DateTimes.EPOCH).toDurationMillis(); if (segmentGranularityDurationMillis <= gran0DurationMillis) { retVal.add(segmentGranularity); } } retVal.sort((g1, g2) -> { long duration1 = g2.bucket(DateTimes.EPOCH).toDurationMillis(); long duration2 = g1.bucket(DateTimes.EPOCH).toDurationMillis(); return Longs.compare(duration1, duration2); }); return retVal; }
@Override public DateTime toDate(String filePath, Formatter formatter) { Integer[] vals = getDateValues(filePath, formatter); GranularityType granularityType = GranularityType.fromPeriod(period); DateTime date = granularityType.getDateTime(vals); if (date != null) { return bucketStart(date); } return null; }
@Override public DateTimeZone getTimezone() { return granularity instanceof PeriodGranularity ? ((PeriodGranularity) granularity).getTimeZone() : DateTimeZone.UTC; }
@Nonnull @Override public ExprEval eval(final ObjectBinding bindings) { final PeriodGranularity granularity = computeGranularity(args, bindings); return ExprEval.of(granularity.bucketStart(DateTimes.utc(args.get(0).eval(bindings).asLong())).getMillis()); }
@Nonnull @Override public ExprEval eval(final ObjectBinding bindings) { final PeriodGranularity granularity = getGranularity(args, bindings); return ExprEval.of(granularity.bucketEnd(DateTimes.utc(args.get(0).eval(bindings).asLong())).getMillis()); }
PeriodGranularity periodOrigin = new PeriodGranularity(new Period("PT15M"), origin, null); assertSameDateTime( Lists.newArrayList( ), Lists.newArrayList( periodOrigin.bucketStart(DateTimes.of("2012-01-01T05:00:04.123Z")), periodOrigin.bucketStart(DateTimes.of("2012-01-02T07:08:04.123Z")), periodOrigin.bucketStart(DateTimes.of("2012-01-04T00:20:04.123Z")) PeriodGranularity periodNoOrigin = new PeriodGranularity(new Period("PT15M"), null, null); assertSameDateTime( Lists.newArrayList( ), Lists.newArrayList( periodNoOrigin.bucketStart(DateTimes.of("2012-01-01T05:00:04.123Z")), periodNoOrigin.bucketStart(DateTimes.of("2012-01-02T07:00:04.123Z")), periodNoOrigin.bucketStart(DateTimes.of("2012-01-04T00:20:04.123Z"))
@Test public void testIterableMonth() { final DateTimeZone tz = DateTimes.inferTzFromString("America/Los_Angeles"); final DateTime baseTime = new DateTime("2012-11-03T10:00:00", tz); assertSameInterval( Lists.newArrayList( new DateTime("2012-11-01T00:00:00.000-07:00", tz), new DateTime("2012-12-01T00:00:00.000-08:00", tz), new DateTime("2013-01-01T00:00:00.000-08:00", tz), new DateTime("2013-02-01T00:00:00.000-08:00", tz) ), new PeriodGranularity(new Period("P1M"), null, tz) .getIterable(new Interval(baseTime, baseTime.plus(Months.months(3)))) ); }
PeriodGranularity granularity = new PeriodGranularity( period, provisioningSchedulerConfig.getOriginTime(), null ); final long startTime = granularity.bucketEnd(DateTimes.nowUtc()).getMillis();
@Nonnull @Override public ExprEval eval(final ObjectBinding bindings) { final PeriodGranularity granularity = getGranularity(args, bindings); final Period period = granularity.getPeriod(); final Chronology chronology = ISOChronology.getInstance(granularity.getTimeZone()); final int step = getStep(args, bindings); return ExprEval.of(chronology.add(period, args.get(0).eval(bindings).asLong(), step)); }
public static List<Granularity> granularitiesFinerThan(final Granularity gran0) { final List<Granularity> retVal = Lists.newArrayList(); final DateTime origin = (gran0 instanceof PeriodGranularity) ? ((PeriodGranularity) gran0).getOrigin() : null; final DateTimeZone tz = (gran0 instanceof PeriodGranularity) ? ((PeriodGranularity) gran0).getTimeZone() : null; for (GranularityType gran : GranularityType.values()) { /** * All and None are excluded b/c when asked to give all granularities finer * than "TEN_MINUTE", you want the answer to be "FIVE_MINUTE, MINUTE and SECOND" * it doesn't make sense to include ALL or None to be part of this. */ if (gran == GranularityType.ALL || gran == GranularityType.NONE) { continue; } final Granularity segmentGranularity = gran.create(origin, tz); final long segmentGranularityDurationMillis = segmentGranularity.bucket(DateTimes.EPOCH).toDurationMillis(); final long gran0DurationMillis = gran0.bucket(DateTimes.EPOCH).toDurationMillis(); if (segmentGranularityDurationMillis <= gran0DurationMillis) { retVal.add(segmentGranularity); } } retVal.sort((g1, g2) -> { long duration1 = g2.bucket(DateTimes.EPOCH).toDurationMillis(); long duration2 = g1.bucket(DateTimes.EPOCH).toDurationMillis(); return Longs.compare(duration1, duration2); }); return retVal; }