|
@@ -11,6 +11,15 @@ import (
|
|
|
"time"
|
|
|
)
|
|
|
|
|
|
+func ReadTimeDurationPositive(str string) time.Duration {
|
|
|
+ res := ReadTimeDuration(str)
|
|
|
+ if res < 0 {
|
|
|
+ return 0
|
|
|
+ }
|
|
|
+
|
|
|
+ return res
|
|
|
+}
|
|
|
+
|
|
|
func ReadTimeDuration(str string) time.Duration {
|
|
|
if str == "forever" || str == "none" {
|
|
|
return -1
|
|
@@ -18,109 +27,109 @@ func ReadTimeDuration(str string) time.Duration {
|
|
|
|
|
|
if strings.HasSuffix(strings.ToUpper(str), "Y") {
|
|
|
numStr := str[:len(str)-1]
|
|
|
- num, _ := strconv.ParseUint(numStr, 10, 64)
|
|
|
+ num, _ := strconv.ParseInt(numStr, 10, 64)
|
|
|
return time.Hour * 24 * 365 * time.Duration(num)
|
|
|
} else if strings.HasSuffix(strings.ToLower(str), "year") {
|
|
|
numStr := str[:len(str)-4]
|
|
|
- num, _ := strconv.ParseUint(numStr, 10, 64)
|
|
|
+ num, _ := strconv.ParseInt(numStr, 10, 64)
|
|
|
return time.Hour * 24 * 365 * time.Duration(num)
|
|
|
}
|
|
|
|
|
|
if strings.HasSuffix(strings.ToUpper(str), "M") {
|
|
|
numStr := str[:len(str)-1]
|
|
|
- num, _ := strconv.ParseUint(numStr, 10, 64)
|
|
|
+ num, _ := strconv.ParseInt(numStr, 10, 64)
|
|
|
return time.Hour * 24 * 31 * time.Duration(num)
|
|
|
} else if strings.HasSuffix(strings.ToLower(str), "month") {
|
|
|
numStr := str[:len(str)-5]
|
|
|
- num, _ := strconv.ParseUint(numStr, 10, 64)
|
|
|
+ num, _ := strconv.ParseInt(numStr, 10, 64)
|
|
|
return time.Hour * 24 * 31 * time.Duration(num)
|
|
|
}
|
|
|
|
|
|
if strings.HasSuffix(strings.ToUpper(str), "W") {
|
|
|
numStr := str[:len(str)-1]
|
|
|
- num, _ := strconv.ParseUint(numStr, 10, 64)
|
|
|
+ num, _ := strconv.ParseInt(numStr, 10, 64)
|
|
|
return time.Hour * 24 * 7 * time.Duration(num)
|
|
|
} else if strings.HasSuffix(strings.ToLower(str), "week") {
|
|
|
numStr := str[:len(str)-4]
|
|
|
- num, _ := strconv.ParseUint(numStr, 10, 64)
|
|
|
+ num, _ := strconv.ParseInt(numStr, 10, 64)
|
|
|
return time.Hour * 24 * 7 * time.Duration(num)
|
|
|
}
|
|
|
|
|
|
if strings.HasSuffix(strings.ToUpper(str), "D") {
|
|
|
numStr := str[:len(str)-1]
|
|
|
- num, _ := strconv.ParseUint(numStr, 10, 64)
|
|
|
+ num, _ := strconv.ParseInt(numStr, 10, 64)
|
|
|
return time.Hour * 24 * time.Duration(num)
|
|
|
} else if strings.HasSuffix(strings.ToLower(str), "day") {
|
|
|
numStr := str[:len(str)-3]
|
|
|
- num, _ := strconv.ParseUint(numStr, 10, 64)
|
|
|
+ num, _ := strconv.ParseInt(numStr, 10, 64)
|
|
|
return time.Hour * 24 * time.Duration(num)
|
|
|
}
|
|
|
|
|
|
if strings.HasSuffix(strings.ToUpper(str), "H") {
|
|
|
numStr := str[:len(str)-1]
|
|
|
- num, _ := strconv.ParseUint(numStr, 10, 64)
|
|
|
+ num, _ := strconv.ParseInt(numStr, 10, 64)
|
|
|
return time.Hour * time.Duration(num)
|
|
|
} else if strings.HasSuffix(strings.ToLower(str), "hour") {
|
|
|
numStr := str[:len(str)-4]
|
|
|
- num, _ := strconv.ParseUint(numStr, 10, 64)
|
|
|
+ num, _ := strconv.ParseInt(numStr, 10, 64)
|
|
|
return time.Hour * time.Duration(num)
|
|
|
}
|
|
|
|
|
|
if strings.HasSuffix(strings.ToUpper(str), "Min") { // 不能用M,否则会和 Month 冲突
|
|
|
numStr := str[:len(str)-3]
|
|
|
- num, _ := strconv.ParseUint(numStr, 10, 64)
|
|
|
+ num, _ := strconv.ParseInt(numStr, 10, 64)
|
|
|
return time.Minute * time.Duration(num)
|
|
|
} else if strings.HasSuffix(strings.ToLower(str), "minute") {
|
|
|
numStr := str[:len(str)-6]
|
|
|
- num, _ := strconv.ParseUint(numStr, 10, 64)
|
|
|
+ num, _ := strconv.ParseInt(numStr, 10, 64)
|
|
|
return time.Minute * time.Duration(num)
|
|
|
}
|
|
|
|
|
|
if strings.HasSuffix(strings.ToUpper(str), "S") {
|
|
|
numStr := str[:len(str)-1]
|
|
|
- num, _ := strconv.ParseUint(numStr, 10, 64)
|
|
|
+ num, _ := strconv.ParseInt(numStr, 10, 64)
|
|
|
return time.Second * time.Duration(num)
|
|
|
} else if strings.HasSuffix(strings.ToLower(str), "second") {
|
|
|
numStr := str[:len(str)-6]
|
|
|
- num, _ := strconv.ParseUint(numStr, 10, 64)
|
|
|
+ num, _ := strconv.ParseInt(numStr, 10, 64)
|
|
|
return time.Second * time.Duration(num)
|
|
|
}
|
|
|
|
|
|
if strings.HasSuffix(strings.ToUpper(str), "MS") {
|
|
|
numStr := str[:len(str)-2]
|
|
|
- num, _ := strconv.ParseUint(numStr, 10, 64)
|
|
|
+ num, _ := strconv.ParseInt(numStr, 10, 64)
|
|
|
return time.Millisecond * time.Duration(num)
|
|
|
} else if strings.HasSuffix(strings.ToLower(str), "millisecond") {
|
|
|
numStr := str[:len(str)-11]
|
|
|
- num, _ := strconv.ParseUint(numStr, 10, 64)
|
|
|
+ num, _ := strconv.ParseInt(numStr, 10, 64)
|
|
|
return time.Millisecond * time.Duration(num)
|
|
|
}
|
|
|
|
|
|
if strings.HasSuffix(strings.ToUpper(str), "MiS") { // 不能用 MS , 否则会和 millisecond 冲突
|
|
|
numStr := str[:len(str)-3]
|
|
|
- num, _ := strconv.ParseUint(numStr, 10, 64)
|
|
|
+ num, _ := strconv.ParseInt(numStr, 10, 64)
|
|
|
return time.Microsecond * time.Duration(num)
|
|
|
} else if strings.HasSuffix(strings.ToUpper(str), "MicroS") {
|
|
|
numStr := str[:len(str)-6]
|
|
|
- num, _ := strconv.ParseUint(numStr, 10, 64)
|
|
|
+ num, _ := strconv.ParseInt(numStr, 10, 64)
|
|
|
return time.Microsecond * time.Duration(num)
|
|
|
} else if strings.HasSuffix(strings.ToLower(str), "microsecond") {
|
|
|
numStr := str[:len(str)-11]
|
|
|
- num, _ := strconv.ParseUint(numStr, 10, 64)
|
|
|
+ num, _ := strconv.ParseInt(numStr, 10, 64)
|
|
|
return time.Microsecond * time.Duration(num)
|
|
|
}
|
|
|
|
|
|
if strings.HasSuffix(strings.ToUpper(str), "NS") {
|
|
|
numStr := str[:len(str)-2]
|
|
|
- num, _ := strconv.ParseUint(numStr, 10, 64)
|
|
|
+ num, _ := strconv.ParseInt(numStr, 10, 64)
|
|
|
return time.Nanosecond * time.Duration(num)
|
|
|
} else if strings.HasSuffix(strings.ToLower(str), "nanosecond") {
|
|
|
numStr := str[:len(str)-10]
|
|
|
- num, _ := strconv.ParseUint(numStr, 10, 64)
|
|
|
+ num, _ := strconv.ParseInt(numStr, 10, 64)
|
|
|
return time.Nanosecond * time.Duration(num)
|
|
|
}
|
|
|
|
|
|
- num, _ := strconv.ParseUint(str, 10, 64)
|
|
|
+ num, _ := strconv.ParseInt(str, 10, 64)
|
|
|
return time.Duration(num) * time.Second
|
|
|
}
|
|
|
|