mirror of https://github.com/apache/druid.git
Fixed PeriodGranularity for Asia pacific timezones (#5410)
This commit is contained in:
parent
ac5034e241
commit
0f009a41e1
|
@ -326,8 +326,11 @@ public class PeriodGranularity extends Granularity implements JsonSerializable
|
||||||
h -= h % hours;
|
h -= h % hours;
|
||||||
long tt = chronology.hours().add(origin, h);
|
long tt = chronology.hours().add(origin, h);
|
||||||
// always round down to the previous period (for timestamps prior to origin)
|
// always round down to the previous period (for timestamps prior to origin)
|
||||||
if (t < tt) {
|
if (t < tt && origin > 0) {
|
||||||
t = chronology.hours().add(tt, -hours);
|
t = chronology.hours().add(tt, -hours);
|
||||||
|
} else if (t > tt && origin < 0) {
|
||||||
|
t = chronology.minuteOfHour().roundFloor(tt);
|
||||||
|
t = chronology.minuteOfHour().set(t, 0);
|
||||||
} else {
|
} else {
|
||||||
t = tt;
|
t = tt;
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,6 +50,7 @@ import java.net.URL;
|
||||||
import java.net.URLClassLoader;
|
import java.net.URLClassLoader;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.TimeZone;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*/
|
*/
|
||||||
|
@ -811,4 +812,54 @@ public class QueryGranularityTest
|
||||||
Assert.assertNotNull(String.valueOf(i), Class.forName(className, true, loader));
|
Assert.assertNotNull(String.valueOf(i), Class.forName(className, true, loader));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testTruncateKathmandu() throws Exception
|
||||||
|
{
|
||||||
|
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() throws Exception
|
||||||
|
{
|
||||||
|
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())
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue