package cobol import ( "fmt" "time" ) // this math isn't perfect but I don't care right now // use time. func FormatDuration(d time.Duration) string { result := "" // check if it's more than a year years := int(d.Hours()) / (24 * 365) if years > 0 { result += fmt.Sprintf("%3d Y", years) return result } days := int(d.Hours()) / 24 /* was terrible // check if it's more than a day if days > 45 { months := int(d.Hours()) % 12 result += fmt.Sprintf("%2d M", months) return result } */ if days > 0 { result += fmt.Sprintf("%3d d", days) return result } // check if it's more than an hour hours := int(d.Hours()) % 24 if hours > 2 { result += fmt.Sprintf("%3d h", hours) return result } // check if it's more than a minute minutes := int(d.Minutes()) % 60 if minutes > 2 { result += fmt.Sprintf("%3d m", minutes) return result } // check if it's more than a second seconds := int(d.Seconds()) % 60 if seconds > 0 { result += fmt.Sprintf("%3d s", seconds) return result } // report in milliseconds ms := int(d.Milliseconds()) if ms > 100 { // todo: print .3s, etc ? } if ms > 0 { /* if ms > 99 { result += fmt.Sprintf("%-3dm", ms) return result } */ result += fmt.Sprintf("%3dms", ms) return result } // report in milliseconds mc := int(d.Microseconds()) if mc > 0 { result += fmt.Sprintf("%3dmc", mc) return result } ns := int(d.Nanoseconds()) result += fmt.Sprintf("%3dns", ns) return result }