Better stringification of play times longer than 1 hr

This commit is contained in:
Drew Weymouth
2024-06-13 18:28:38 -07:00
parent 768c3851ea
commit 169b914abf
6 changed files with 71 additions and 10 deletions
+37 -1
View File
@@ -32,7 +32,7 @@ func MakeOpaque(c color.Color) color.Color {
return c
}
func SecondsToTimeString(s float64) string {
func SecondsToMMSS(s float64) string {
if s < 0 {
s = 0
}
@@ -43,6 +43,42 @@ func SecondsToTimeString(s float64) string {
return fmt.Sprintf("%d:%02d", min, sec)
}
func SecondsToTimeString(s float64) string {
if s < 3600 /*1 hour*/ {
return SecondsToMMSS(s)
}
sec := int64(s)
days := sec / 86400
sec -= days * 86400
hr := sec / 3600
sec -= hr * 3600
min := sec / 60
sec -= min * 60
var str string
if days > 0 {
daysStr := "days"
if days == 1 {
daysStr = "day"
}
str = fmt.Sprintf("%d %s ", days, daysStr)
}
if hr > 0 {
hrStr := "hrs"
if hr == 1 {
hrStr = "hr"
}
str += fmt.Sprintf("%d %s ", hr, hrStr)
}
if min > 0 {
str += fmt.Sprintf("%d min ", min)
}
if sec > 0 {
str += fmt.Sprintf("%d sec ", sec)
}
return str[:len(str)-1]
}
func BytesToSizeString(bytes int64) string {
var num float64
var suffix string
+25
View File
@@ -0,0 +1,25 @@
package util
import "testing"
func TestSecondsToTimeString(t *testing.T) {
inputs := []float64{
57.2,
3360,
4800,
4812,
86401,
}
outputs := []string{
"0:57",
"56:00",
"1 hr 20 min",
"1 hr 20 min 12 sec",
"1 day 1 sec",
}
for i, input := range inputs {
if s := SecondsToTimeString(input); s != outputs[i] {
t.Errorf("got %s, want %s", s, outputs[i])
}
}
}