@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()); }
@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; }
@Nonnull @Override public ExprEval eval(final ObjectBinding bindings) { ExprEval eval = arg.eval(bindings); if (eval.isNumericNull()) { // Return null if the argument if null. return ExprEval.of(null); } return ExprEval.of(granularity.bucketStart(DateTimes.utc(eval.asLong())).getMillis()); }
@Test public void testTruncateKathmandu() { final DateTimeZone tz = DateTimeZone.forTimeZone(TimeZone.getTimeZone("Asia/Kathmandu")); final DateTime date = new DateTime("2011-03-15T21:42:23.898+05:45", 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+05:45", tz), year.toDateTime(year.bucketStart(date).getMillis()) ); Assert.assertEquals( new DateTime("2011-03-15T21:00:00.000+05:45", tz), hour.toDateTime(hour.bucketStart(date).getMillis()) ); Assert.assertEquals( new DateTime("2011-03-15T20:00:00.000+05:45", tz), twoHour.toDateTime(twoHour.bucketStart(date).getMillis()) ); }
@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()) ); }
), 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")) ), 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"))
), 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-03-01T07:20:04.123-08:00")), periodOrigin.bucketStart(DateTimes.of("2012-02-04T05:00:00.000-08:00")) ), Lists.newArrayList( periodNoOrigin.bucketStart(DateTimes.of("1970-01-01T05:02:04.123-08:00")), periodNoOrigin.bucketStart(DateTimes.of("2012-01-01T05:02:04.123-08:00")), periodNoOrigin.bucketStart(DateTimes.of("2012-01-15T07:01:04.123-08:00")), periodNoOrigin.bucketStart(DateTimes.of("2012-02-16T00:00:00.000-08:00")) ), 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-03T00:20:04.123-08:00")), periodOrigin.bucketStart(DateTimes.of("2012-02-03T22:25:00.000-08:00"))
), 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"))
@Test public void testCompoundPeriodMillisTruncate() { { final DateTime origin = DateTimes.of("2012-01-02T05:00:00.000-08:00"); PeriodGranularity periodOrigin = new PeriodGranularity( new Period("PT12H5M"), origin, DateTimeZone.UTC ); assertSameDateTime( Lists.newArrayList( DateTimes.of("2012-01-01T04:50:00.000-08:00"), DateTimes.of("2012-01-02T05:00:00.000-08:00"), DateTimes.of("2012-01-02T17:05:00.000-08:00"), DateTimes.of("2012-02-03T22:25:00.000-08:00") ), 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-03T00:20:04.123-08:00")), periodOrigin.bucketStart(DateTimes.of("2012-02-03T22:25:00.000-08:00")) ) ); } }
), 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")) ), 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"))
@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()); }
@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; }
@Nonnull @Override public ExprEval eval(final ObjectBinding bindings) { ExprEval eval = arg.eval(bindings); if (eval.isNumericNull()) { // Return null if the argument if null. return ExprEval.of(null); } return ExprEval.of(granularity.bucketStart(DateTimes.utc(eval.asLong())).getMillis()); }