You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
1.6 KiB
77 lines
1.6 KiB
package conver |
|
|
|
import ( |
|
"fmt" |
|
"strings" |
|
"time" |
|
|
|
"github.com/dsnet/golib/unitconv" |
|
) |
|
|
|
// ParseDataUnit parse 1Ki -> 1024, 1K -> 1000 |
|
func ParseDataUnit(unit string) (val float64, err error) { |
|
val, err = unitconv.ParsePrefix(unit, unitconv.AutoParse) |
|
return |
|
} |
|
|
|
func ParseDataUnitInt(unit string) (val int, err error) { |
|
v, err := ParseDataUnit(unit) |
|
val = int(v) |
|
return |
|
} |
|
|
|
func MustParseDataUnit(unit string) (val float64) { |
|
val, err := unitconv.ParsePrefix(unit, unitconv.AutoParse) |
|
if err != nil { |
|
panic(fmt.Errorf("error parse data unit %s, %s", unit, err.Error())) |
|
} |
|
return |
|
} |
|
|
|
func MustParseDataUnitInt(unit string) (val int) { |
|
return int(MustParseDataUnit(unit)) |
|
} |
|
|
|
func ParseDuration(s string) (time.Duration, error) { |
|
return time.ParseDuration(s) |
|
} |
|
|
|
func MustParseDuration(s string) time.Duration { |
|
d, err := ParseDuration(s) |
|
if err != nil { |
|
panic(err) |
|
} |
|
return d |
|
} |
|
|
|
// TimeMilliFormat 时间戳差转换成可视化时间单位 2100 -> 1h-2s-100ms |
|
func TimeMilliFormat(milli int64, sep string) (r string) { |
|
day := milli / (1000 * 60 * 60 * 24) |
|
milli -= day * (1000 * 60 * 60 * 24) |
|
hour := milli / (1000 * 60 * 60) |
|
milli -= hour * (1000 * 60 * 60) |
|
minite := milli / (1000 * 60) |
|
milli -= minite * (1000 * 60) |
|
second := milli / (1000) |
|
milli -= second * (1000) |
|
|
|
vs := []int64{day, hour, minite, second, milli} |
|
units := []string{"d", "h", "m", "s", "ms"} |
|
index := -1 |
|
for i, v := range vs { |
|
if v > 0 { |
|
index = i |
|
break |
|
} |
|
} |
|
if index == -1 { |
|
r = "0ms" |
|
return |
|
} |
|
var rs []string |
|
for ; index < len(vs); index++ { |
|
rs = append(rs, fmt.Sprintf("%d%s", vs[index], units[index])) |
|
} |
|
r = strings.Join(rs, sep) |
|
return |
|
}
|
|
|