未验证 提交 d0b020e5 编写于 作者: D Daming 提交者: GitHub

fix timebucket converter issue (#5585)

上级 d02ee0af
...@@ -104,17 +104,22 @@ public class TimeBucket { ...@@ -104,17 +104,22 @@ public class TimeBucket {
public static long getTimestamp(long timeBucket, DownSampling downsampling) { public static long getTimestamp(long timeBucket, DownSampling downsampling) {
Calendar calendar = Calendar.getInstance(); Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(0); calendar.setTimeInMillis(0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.HOUR_OF_DAY, 0);
switch (downsampling) { switch (downsampling) {
case Second: case Second:
calendar.set(Calendar.SECOND, (int) (timeBucket % 100)); calendar.set(Calendar.SECOND, (int) (timeBucket % 100));
timeBucket /= 100; timeBucket /= 100;
// Fall through
case Minute: case Minute:
calendar.set(Calendar.MINUTE, (int) (timeBucket % 100)); calendar.set(Calendar.MINUTE, (int) (timeBucket % 100));
timeBucket /= 100; timeBucket /= 100;
// Fall through
case Hour: case Hour:
calendar.set(Calendar.HOUR_OF_DAY, (int) (timeBucket % 100)); calendar.set(Calendar.HOUR_OF_DAY, (int) (timeBucket % 100));
timeBucket /= 100; timeBucket /= 100;
// Fall through
case Day: case Day:
calendar.set(Calendar.DAY_OF_MONTH, (int) (timeBucket % 100)); calendar.set(Calendar.DAY_OF_MONTH, (int) (timeBucket % 100));
timeBucket /= 100; timeBucket /= 100;
......
...@@ -18,63 +18,58 @@ ...@@ -18,63 +18,58 @@
package org.apache.skywalking.oap.server.core.analysis; package org.apache.skywalking.oap.server.core.analysis;
import java.util.concurrent.TimeUnit;
import org.junit.Assert; import org.junit.Assert;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.junit.runners.Parameterized; import org.junit.runners.Parameterized;
import static java.util.concurrent.TimeUnit.DAYS; import java.util.Calendar;
import static java.util.concurrent.TimeUnit.HOURS; import java.util.TimeZone;
import static java.util.concurrent.TimeUnit.MILLISECONDS;
import static java.util.concurrent.TimeUnit.MINUTES;
import static java.util.concurrent.TimeUnit.SECONDS;
@RunWith(Parameterized.class) @RunWith(Parameterized.class)
public class TimeBucketTest { public class TimeBucketTest {
private static final long NOW = System.currentTimeMillis(); private static final long NOW = System.currentTimeMillis();
@Parameterized.Parameters @Parameterized.Parameters
public static Object[][] parameters() { public static Object[] parameters() {
return new Object[][] { return new Object[]{
{
DownSampling.Second, DownSampling.Second,
SECONDS,
MILLISECONDS.toSeconds(NOW)
},
{
DownSampling.Minute, DownSampling.Minute,
MINUTES,
MILLISECONDS.toMinutes(NOW)
},
{
DownSampling.Hour, DownSampling.Hour,
HOURS, DownSampling.Day
MILLISECONDS.toHours(NOW)
},
{
DownSampling.Day,
DAYS,
MILLISECONDS.toDays(NOW)
}
}; };
} }
private DownSampling downSampling; private DownSampling downSampling;
private TimeUnit unit;
private long time;
public TimeBucketTest(DownSampling downSampling, TimeUnit unit, long time) { public TimeBucketTest(DownSampling downSampling) {
this.downSampling = downSampling; this.downSampling = downSampling;
this.unit = unit;
this.time = time;
} }
@Test @Test
public void testConversion() { public void testConversion() {
long timestamp = TimeBucket long timestamp = TimeBucket.getTimestamp(TimeBucket.getTimeBucket(NOW, downSampling));
.getTimestamp(TimeBucket.getTimeBucket(NOW, downSampling));
Assert.assertEquals(timestamp, unit.toMillis(time));
}
Calendar instance = Calendar.getInstance(TimeZone.getDefault());
instance.setTimeInMillis(NOW);
switch (downSampling) {
case Day: {
instance.set(Calendar.HOUR_OF_DAY, 0);
// Fall through
}
case Hour: {
instance.set(Calendar.MINUTE, 0);
// Fall through
}
case Minute: {
instance.set(Calendar.SECOND, 0);
// Fall through
}
case Second: {
instance.set(Calendar.MILLISECOND, 0);
// Fall through
}
}
Assert.assertEquals(instance.getTimeInMillis(), timestamp);
}
} }
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册