summaryrefslogtreecommitdiffstats
path: root/time/time.go
diff options
context:
space:
mode:
Diffstat (limited to 'time/time.go')
-rw-r--r--time/time.go11
1 files changed, 8 insertions, 3 deletions
diff --git a/time/time.go b/time/time.go
index a7821d9..37ecdbb 100644
--- a/time/time.go
+++ b/time/time.go
@@ -8,17 +8,18 @@ import (
"fmt"
"regexp"
"strconv"
+ "time"
)
// ISO 8601 Duration regex for matching duration in PT3H4M60S format.
var durationRegex = regexp.MustCompile(`PT(([0-9]{0,2})?H)?(([0-9]{0,2})?M)?(([0-9]{0,2}?)S)?`)
-// Converts ISO 8601 duration[1] to seconds.
+// Converts ISO 8601 duration[1] to time.Duration
//
// Recognizes durations in this format: PT3H4M60S
//
// [1]: https://en.wikipedia.org/wiki/ISO_8601#Durations
-func Duration(duration string) (int, error) {
+func Duration(duration string) (time.Duration, error) {
m := durationRegex.FindStringSubmatch(duration)
if m == nil || len(m) == 0 {
return 0, fmt.Errorf("duration invalid: %v", duration)
@@ -40,5 +41,9 @@ func Duration(duration string) (int, error) {
secs += hours * 3600
secs += mins * 60
- return secs, nil
+ // Convert seconds to time.Duration.
+ d, err := time.ParseDuration(fmt.Sprintf("%ds", secs))
+
+ return d, nil
+}
}