mirror of
https://github.com/rancher/steve.git
synced 2025-07-18 00:41:38 +00:00
36 lines
712 B
Go
36 lines
712 B
Go
|
package common
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"strings"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
func ParseHumanReadableDuration(s string) (time.Duration, error) {
|
||
|
var total time.Duration
|
||
|
var val int
|
||
|
var unit byte
|
||
|
|
||
|
r := strings.NewReader(s)
|
||
|
for r.Len() > 0 {
|
||
|
if _, err := fmt.Fscanf(r, "%d%c", &val, &unit); err != nil {
|
||
|
return 0, fmt.Errorf("invalid duration in %s: %w", s, err)
|
||
|
}
|
||
|
|
||
|
switch unit {
|
||
|
case 'd':
|
||
|
total += time.Duration(val) * 24 * time.Hour
|
||
|
case 'h':
|
||
|
total += time.Duration(val) * time.Hour
|
||
|
case 'm':
|
||
|
total += time.Duration(val) * time.Minute
|
||
|
case 's':
|
||
|
total += time.Duration(val) * time.Second
|
||
|
default:
|
||
|
return 0, fmt.Errorf("invalid duration unit %s in %s", string(unit), s)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return total, nil
|
||
|
}
|