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

fix timebucket converter issue (#5585)

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