Skip to content

Commit 34ed55a

Browse files
committed
重构time delta,待测试
1 parent d633365 commit 34ed55a

File tree

2 files changed

+78
-33
lines changed

2 files changed

+78
-33
lines changed

time.go

+49-33
Original file line numberDiff line numberDiff line change
@@ -1,81 +1,97 @@
11
package delta
22

3-
import "time"
3+
import (
4+
"fmt"
5+
"time"
6+
)
47

58
// ------------------------------------------------ ---------------------------------------------------------------------
69

7-
// TimeSliceDelta 对时间序列做delta
8-
func TimeSliceDelta(timeSlice []time.Time, compareToType CompareToType) []uint64 {
9-
result := make([]uint64, len(timeSlice))
10+
// ToTimeSliceDelta 对时间序列做delta
11+
func ToTimeSliceDelta(timeSlice []time.Time, compareToType CompareToType) []uint64 {
12+
deltaSlice := make([]uint64, len(timeSlice))
1013
for index, t := range timeSlice {
1114
if index == 0 {
12-
result[index] = uint64(t.UnixMilli())
15+
deltaSlice[index] = uint64(t.UnixMilli())
1316
continue
1417
}
15-
if compareToType == CompareToFirst {
16-
result[index] = TimeDelta(t, timeSlice[0])
17-
} else if compareToType == CompareToLast {
18-
result[index] = TimeDelta(t, timeSlice[index-1])
18+
switch compareToType {
19+
case CompareToFirst:
20+
deltaSlice[index] = TimeDelta(t, timeSlice[0])
21+
case CompareToLast:
22+
deltaSlice[index] = TimeDelta(t, timeSlice[index-1])
23+
default:
24+
panic(fmt.Errorf("not support compare type: %#v", compareToType))
1925
}
2026
}
21-
return result
27+
return deltaSlice
2228
}
2329

2430
// FromTimeSliceDelta 从Time的delta恢复时间序列
2531
func FromTimeSliceDelta(deltaSlice []uint64, compareToType CompareToType) []time.Time {
26-
result := make([]time.Time, 0)
32+
timeSlice := make([]time.Time, 0)
2733
for index, delta := range deltaSlice {
2834
if index == 0 {
29-
result[index] = time.UnixMilli(int64(delta))
35+
timeSlice[index] = time.UnixMilli(int64(delta))
3036
continue
3137
}
32-
if compareToType == CompareToFirst {
33-
result[index] = time.UnixMilli(int64(deltaSlice[0] + delta))
34-
} else if compareToType == CompareToLast {
35-
result[index] = result[index-1].Add(time.Millisecond * time.Duration(delta))
38+
switch compareToType {
39+
case CompareToFirst:
40+
timeSlice[index] = time.UnixMilli(int64(deltaSlice[0] + delta))
41+
case CompareToLast:
42+
timeSlice[index] = timeSlice[index-1].Add(time.Millisecond * time.Duration(delta))
43+
default:
44+
panic(fmt.Errorf("not support compare type: %#v", compareToType))
3645
}
3746
}
38-
return result
47+
return timeSlice
3948
}
4049

50+
// TimeDelta 求两个时间的差
4151
func TimeDelta(t1 time.Time, t2 time.Time) uint64 {
4252
return uint64(t1.UnixMilli() - t2.UnixMilli())
4353
}
4454

4555
// ------------------------------------------------ ---------------------------------------------------------------------
4656

47-
// TimestampSliceDelta 对时间戳做delta
48-
func TimestampSliceDelta(timestampSlice []uint64, compareToType CompareToType) []uint64 {
49-
result := make([]uint64, len(timestampSlice))
57+
// ToTimestampSliceDelta 对时间戳做delta
58+
func ToTimestampSliceDelta(timestampSlice []uint64, compareToType CompareToType) []uint64 {
59+
deltaSlice := make([]uint64, len(timestampSlice))
5060
for index, timestamp := range timestampSlice {
5161
if index == 0 {
52-
result[index] = timestamp
62+
deltaSlice[index] = timestamp
5363
continue
5464
}
55-
if compareToType == CompareToFirst {
56-
result[index] = timestampSlice[index] - timestampSlice[0]
57-
} else if compareToType == CompareToLast {
58-
result[index] = timestampSlice[index] - timestampSlice[index-1]
65+
switch compareToType {
66+
case CompareToFirst:
67+
deltaSlice[index] = timestamp - timestampSlice[0]
68+
case CompareToLast:
69+
deltaSlice[index] = timestamp - timestampSlice[index-1]
70+
default:
71+
panic(fmt.Errorf("not support compare type: %#v", compareToType))
5972
}
6073
}
61-
return result
74+
return deltaSlice
6275
}
6376

6477
// FromTimestampSliceDelta 从时间戳的delta恢复时间戳序列
6578
func FromTimestampSliceDelta(deltaSlice []uint64, compareToType CompareToType) []uint64 {
66-
result := make([]uint64, 0)
79+
timeSlice := make([]uint64, 0)
6780
for index, delta := range deltaSlice {
6881
if index == 0 {
69-
result[index] = delta
82+
timeSlice[index] = delta
7083
continue
7184
}
72-
if compareToType == CompareToFirst {
73-
result[index] = deltaSlice[0] + delta
74-
} else if compareToType == CompareToLast {
75-
result[index] = result[index-1] + delta
85+
switch compareToType {
86+
case CompareToFirst:
87+
timeSlice[index] = deltaSlice[0] + delta
88+
case CompareToLast:
89+
timeSlice[index] = timeSlice[index-1] + delta
90+
default:
91+
panic(fmt.Errorf("not support compare type: %#v", compareToType))
7692
}
7793
}
78-
return result
94+
return timeSlice
7995
}
8096

8197
// ------------------------------------------------ ---------------------------------------------------------------------

time_test.go

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package delta
2+
3+
import (
4+
"testing"
5+
)
6+
7+
func TestFromTimeSliceDelta(t *testing.T) {
8+
// TODO
9+
10+
}
11+
12+
func TestFromTimestampSliceDelta(t *testing.T) {
13+
// TODO
14+
15+
}
16+
17+
func TestTimeDelta(t *testing.T) {
18+
// TODO
19+
20+
}
21+
22+
func TestTimeSliceDelta(t *testing.T) {
23+
24+
// TODO
25+
}
26+
27+
func TestTimestampSliceDelta(t *testing.T) {
28+
// TODO
29+
}

0 commit comments

Comments
 (0)