-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathconvert.go
130 lines (114 loc) · 2.75 KB
/
convert.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
package bilog
import (
"reflect"
"strconv"
"unsafe"
)
// 快速格式化年月日
// year之外的数字如果小于10则会使用零填充prefix
var yearBuf = func() []string {
strs := make([]string, 4096-1970)
for k := range strs {
strs[k] = strconv.Itoa(1970+k) + "-"
}
return strs
}()
var monthBuf = func() []string {
strs := make([]string, 12)
for k := range strs {
strs[k] = strconv.Itoa(1+k) + "-"
if 1+k < 10 {
strs[k] = "0" + strs[k]
}
}
return strs
}()
var dayBuf = func() []string {
strs := make([]string, 31)
for k := range strs {
strs[k] = strconv.Itoa(1+k) + " "
if 1+k < 10 {
strs[k] = "0" + strs[k]
}
}
return strs
}()
var hourBuf = func() []string {
strs := make([]string, 24)
for k := range strs {
strs[k] = strconv.Itoa(k) + ":"
if k < 10 {
strs[k] = "0" + strs[k]
}
}
return strs
}()
// 分钟有00,索引k无需+1
var minuteBuf = func() []string {
strs := make([]string, 60)
for k := range strs {
strs[k] = strconv.Itoa(k) + ":"
if k < 10 {
strs[k] = "0" + strs[k]
}
}
return strs
}()
// 秒钟有00, 索引k无需+1
var secondBuf = func() []string {
strs := make([]string, 60)
for k := range strs {
strs[k] = strconv.Itoa(k) + " "
if k < 10 {
strs[k] = "0" + strs[k]
}
}
return strs
}()
func fastConvertYear(i int) string {
return yearBuf[i-1970]
}
func fastConvertMonth(i int) string {
return monthBuf[i-1]
}
func fastConvertDay(i int) string {
return dayBuf[i-1]
}
// 小时有00,寻址时不需要-1
func fastConvertHour(i int) string {
return hourBuf[i]
}
// 分钟有00,寻址时不需要-1
func fastConvertMinute(i int) string {
return minuteBuf[i]
}
// 秒钟有00,寻址时不需要-1
func fastConvertSecond(i int) string {
return secondBuf[i]
}
// 返回存储时间的字节数组和写入数据的有效数量
func fastConvertAllToArray(year, month, day, hour, minute, second int) (tmp [32]byte, eff int) {
data := (uintptr)(unsafe.Pointer(&tmp))
slice := *(*[]byte)(unsafe.Pointer(&reflect.SliceHeader{
Data: data,
Len: 0,
Cap: len(tmp),
}))
slice = append(slice, fastConvertYear(year)...)
slice = append(slice, fastConvertMonth(month)...)
slice = append(slice, fastConvertDay(day)...)
slice = append(slice, fastConvertHour(hour)...)
slice = append(slice, fastConvertMinute(minute)...)
slice = append(slice, fastConvertSecond(second)...)
return tmp, len(slice)
}
func fastConvertAllToSlice(year, month, day, hour, minute, second int) []byte {
tmp := make([]byte, 0, 32)
tmp = append(tmp, fastConvertYear(year)...)
tmp = append(tmp, fastConvertMonth(month)...)
tmp = append(tmp, fastConvertDay(day)...)
tmp = append(tmp, fastConvertHour(hour)...)
tmp = append(tmp, fastConvertMinute(minute)...)
tmp = append(tmp, fastConvertSecond(second)...)
return tmp
}