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) }