58 lines
1019 B
Go
58 lines
1019 B
Go
package format
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
)
|
|
|
|
func HumanBytes(n uint64) string {
|
|
const (
|
|
KB = 1024
|
|
MB = 1024 * KB
|
|
GB = 1024 * MB
|
|
TB = 1024 * GB
|
|
)
|
|
|
|
switch {
|
|
case n >= TB:
|
|
return fmt.Sprintf("%.2f TB", float64(n)/TB)
|
|
case n >= GB:
|
|
return fmt.Sprintf("%.2f GB", float64(n)/GB)
|
|
case n >= MB:
|
|
return fmt.Sprintf("%.2f MB", float64(n)/MB)
|
|
case n >= KB:
|
|
return fmt.Sprintf("%.2f KB", float64(n)/KB)
|
|
default:
|
|
return fmt.Sprintf("%d B", n)
|
|
}
|
|
}
|
|
|
|
func HumanDuration(d time.Duration) string {
|
|
d = d.Round(time.Second)
|
|
|
|
days := d / (24 * time.Hour)
|
|
d -= days * 24 * time.Hour
|
|
|
|
hours := d / time.Hour
|
|
d -= hours * time.Hour
|
|
|
|
minutes := d / time.Minute
|
|
d -= minutes * time.Minute
|
|
|
|
seconds := d / time.Second
|
|
|
|
if days > 0 {
|
|
return fmt.Sprintf("%dd %02dh %02dm %02ds", days, hours, minutes, seconds)
|
|
}
|
|
|
|
if hours > 0 {
|
|
return fmt.Sprintf("%dh %02dm %02ds", hours, minutes, seconds)
|
|
}
|
|
|
|
if minutes > 0 {
|
|
return fmt.Sprintf("%dm %02ds", minutes, seconds)
|
|
}
|
|
|
|
return fmt.Sprintf("%ds", seconds)
|
|
}
|