|
@@ -6,7 +6,6 @@ package strconvutils
|
|
|
|
|
|
import (
|
|
import (
|
|
"fmt"
|
|
"fmt"
|
|
- "strconv"
|
|
|
|
"strings"
|
|
"strings"
|
|
"time"
|
|
"time"
|
|
)
|
|
)
|
|
@@ -21,115 +20,111 @@ func ReadTimeDurationPositive(str string) time.Duration {
|
|
}
|
|
}
|
|
|
|
|
|
func ReadTimeDuration(str string) time.Duration {
|
|
func ReadTimeDuration(str string) time.Duration {
|
|
- if str == "forever" || str == "none" {
|
|
|
|
- return -1
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
if strings.HasSuffix(strings.ToUpper(str), "Y") {
|
|
if strings.HasSuffix(strings.ToUpper(str), "Y") {
|
|
numStr := str[:len(str)-1]
|
|
numStr := str[:len(str)-1]
|
|
- num, _ := strconv.ParseInt(numStr, 10, 64)
|
|
|
|
|
|
+ num, _ := ParserInt(numStr, 10, 64)
|
|
return time.Hour * 24 * 365 * time.Duration(num)
|
|
return time.Hour * 24 * 365 * time.Duration(num)
|
|
} else if strings.HasSuffix(strings.ToLower(str), "year") {
|
|
} else if strings.HasSuffix(strings.ToLower(str), "year") {
|
|
numStr := str[:len(str)-4]
|
|
numStr := str[:len(str)-4]
|
|
- num, _ := strconv.ParseInt(numStr, 10, 64)
|
|
|
|
|
|
+ num, _ := ParserInt(numStr, 10, 64)
|
|
return time.Hour * 24 * 365 * time.Duration(num)
|
|
return time.Hour * 24 * 365 * time.Duration(num)
|
|
}
|
|
}
|
|
|
|
|
|
if strings.HasSuffix(strings.ToUpper(str), "M") {
|
|
if strings.HasSuffix(strings.ToUpper(str), "M") {
|
|
numStr := str[:len(str)-1]
|
|
numStr := str[:len(str)-1]
|
|
- num, _ := strconv.ParseInt(numStr, 10, 64)
|
|
|
|
|
|
+ num, _ := ParserInt(numStr, 10, 64)
|
|
return time.Hour * 24 * 31 * time.Duration(num)
|
|
return time.Hour * 24 * 31 * time.Duration(num)
|
|
} else if strings.HasSuffix(strings.ToLower(str), "month") {
|
|
} else if strings.HasSuffix(strings.ToLower(str), "month") {
|
|
numStr := str[:len(str)-5]
|
|
numStr := str[:len(str)-5]
|
|
- num, _ := strconv.ParseInt(numStr, 10, 64)
|
|
|
|
|
|
+ num, _ := ParserInt(numStr, 10, 64)
|
|
return time.Hour * 24 * 31 * time.Duration(num)
|
|
return time.Hour * 24 * 31 * time.Duration(num)
|
|
}
|
|
}
|
|
|
|
|
|
if strings.HasSuffix(strings.ToUpper(str), "W") {
|
|
if strings.HasSuffix(strings.ToUpper(str), "W") {
|
|
numStr := str[:len(str)-1]
|
|
numStr := str[:len(str)-1]
|
|
- num, _ := strconv.ParseInt(numStr, 10, 64)
|
|
|
|
|
|
+ num, _ := ParserInt(numStr, 10, 64)
|
|
return time.Hour * 24 * 7 * time.Duration(num)
|
|
return time.Hour * 24 * 7 * time.Duration(num)
|
|
} else if strings.HasSuffix(strings.ToLower(str), "week") {
|
|
} else if strings.HasSuffix(strings.ToLower(str), "week") {
|
|
numStr := str[:len(str)-4]
|
|
numStr := str[:len(str)-4]
|
|
- num, _ := strconv.ParseInt(numStr, 10, 64)
|
|
|
|
|
|
+ num, _ := ParserInt(numStr, 10, 64)
|
|
return time.Hour * 24 * 7 * time.Duration(num)
|
|
return time.Hour * 24 * 7 * time.Duration(num)
|
|
}
|
|
}
|
|
|
|
|
|
if strings.HasSuffix(strings.ToUpper(str), "D") {
|
|
if strings.HasSuffix(strings.ToUpper(str), "D") {
|
|
numStr := str[:len(str)-1]
|
|
numStr := str[:len(str)-1]
|
|
- num, _ := strconv.ParseInt(numStr, 10, 64)
|
|
|
|
|
|
+ num, _ := ParserInt(numStr, 10, 64)
|
|
return time.Hour * 24 * time.Duration(num)
|
|
return time.Hour * 24 * time.Duration(num)
|
|
} else if strings.HasSuffix(strings.ToLower(str), "day") {
|
|
} else if strings.HasSuffix(strings.ToLower(str), "day") {
|
|
numStr := str[:len(str)-3]
|
|
numStr := str[:len(str)-3]
|
|
- num, _ := strconv.ParseInt(numStr, 10, 64)
|
|
|
|
|
|
+ num, _ := ParserInt(numStr, 10, 64)
|
|
return time.Hour * 24 * time.Duration(num)
|
|
return time.Hour * 24 * time.Duration(num)
|
|
}
|
|
}
|
|
|
|
|
|
if strings.HasSuffix(strings.ToUpper(str), "H") {
|
|
if strings.HasSuffix(strings.ToUpper(str), "H") {
|
|
numStr := str[:len(str)-1]
|
|
numStr := str[:len(str)-1]
|
|
- num, _ := strconv.ParseInt(numStr, 10, 64)
|
|
|
|
|
|
+ num, _ := ParserInt(numStr, 10, 64)
|
|
return time.Hour * time.Duration(num)
|
|
return time.Hour * time.Duration(num)
|
|
} else if strings.HasSuffix(strings.ToLower(str), "hour") {
|
|
} else if strings.HasSuffix(strings.ToLower(str), "hour") {
|
|
numStr := str[:len(str)-4]
|
|
numStr := str[:len(str)-4]
|
|
- num, _ := strconv.ParseInt(numStr, 10, 64)
|
|
|
|
|
|
+ num, _ := ParserInt(numStr, 10, 64)
|
|
return time.Hour * time.Duration(num)
|
|
return time.Hour * time.Duration(num)
|
|
}
|
|
}
|
|
|
|
|
|
- if strings.HasSuffix(strings.ToUpper(str), "Min") { // 不能用M,否则会和 Month 冲突
|
|
|
|
|
|
+ if strings.HasSuffix(strings.ToUpper(str), "MIN") { // 不能用M,否则会和 Month 冲突
|
|
numStr := str[:len(str)-3]
|
|
numStr := str[:len(str)-3]
|
|
- num, _ := strconv.ParseInt(numStr, 10, 64)
|
|
|
|
|
|
+ num, _ := ParserInt(numStr, 10, 64)
|
|
return time.Minute * time.Duration(num)
|
|
return time.Minute * time.Duration(num)
|
|
} else if strings.HasSuffix(strings.ToLower(str), "minute") {
|
|
} else if strings.HasSuffix(strings.ToLower(str), "minute") {
|
|
numStr := str[:len(str)-6]
|
|
numStr := str[:len(str)-6]
|
|
- num, _ := strconv.ParseInt(numStr, 10, 64)
|
|
|
|
|
|
+ num, _ := ParserInt(numStr, 10, 64)
|
|
return time.Minute * time.Duration(num)
|
|
return time.Minute * time.Duration(num)
|
|
}
|
|
}
|
|
|
|
|
|
if strings.HasSuffix(strings.ToUpper(str), "S") {
|
|
if strings.HasSuffix(strings.ToUpper(str), "S") {
|
|
numStr := str[:len(str)-1]
|
|
numStr := str[:len(str)-1]
|
|
- num, _ := strconv.ParseInt(numStr, 10, 64)
|
|
|
|
|
|
+ num, _ := ParserInt(numStr, 10, 64)
|
|
return time.Second * time.Duration(num)
|
|
return time.Second * time.Duration(num)
|
|
} else if strings.HasSuffix(strings.ToLower(str), "second") {
|
|
} else if strings.HasSuffix(strings.ToLower(str), "second") {
|
|
numStr := str[:len(str)-6]
|
|
numStr := str[:len(str)-6]
|
|
- num, _ := strconv.ParseInt(numStr, 10, 64)
|
|
|
|
|
|
+ num, _ := ParserInt(numStr, 10, 64)
|
|
return time.Second * time.Duration(num)
|
|
return time.Second * time.Duration(num)
|
|
}
|
|
}
|
|
|
|
|
|
if strings.HasSuffix(strings.ToUpper(str), "MS") {
|
|
if strings.HasSuffix(strings.ToUpper(str), "MS") {
|
|
numStr := str[:len(str)-2]
|
|
numStr := str[:len(str)-2]
|
|
- num, _ := strconv.ParseInt(numStr, 10, 64)
|
|
|
|
|
|
+ num, _ := ParserInt(numStr, 10, 64)
|
|
return time.Millisecond * time.Duration(num)
|
|
return time.Millisecond * time.Duration(num)
|
|
} else if strings.HasSuffix(strings.ToLower(str), "millisecond") {
|
|
} else if strings.HasSuffix(strings.ToLower(str), "millisecond") {
|
|
numStr := str[:len(str)-11]
|
|
numStr := str[:len(str)-11]
|
|
- num, _ := strconv.ParseInt(numStr, 10, 64)
|
|
|
|
|
|
+ num, _ := ParserInt(numStr, 10, 64)
|
|
return time.Millisecond * time.Duration(num)
|
|
return time.Millisecond * time.Duration(num)
|
|
}
|
|
}
|
|
|
|
|
|
- if strings.HasSuffix(strings.ToUpper(str), "MiS") { // 不能用 MS , 否则会和 millisecond 冲突
|
|
|
|
|
|
+ if strings.HasSuffix(strings.ToUpper(str), "MIS") { // 不能用 MS , 否则会和 millisecond 冲突
|
|
numStr := str[:len(str)-3]
|
|
numStr := str[:len(str)-3]
|
|
- num, _ := strconv.ParseInt(numStr, 10, 64)
|
|
|
|
|
|
+ num, _ := ParserInt(numStr, 10, 64)
|
|
return time.Microsecond * time.Duration(num)
|
|
return time.Microsecond * time.Duration(num)
|
|
} else if strings.HasSuffix(strings.ToUpper(str), "MicroS") {
|
|
} else if strings.HasSuffix(strings.ToUpper(str), "MicroS") {
|
|
numStr := str[:len(str)-6]
|
|
numStr := str[:len(str)-6]
|
|
- num, _ := strconv.ParseInt(numStr, 10, 64)
|
|
|
|
|
|
+ num, _ := ParserInt(numStr, 10, 64)
|
|
return time.Microsecond * time.Duration(num)
|
|
return time.Microsecond * time.Duration(num)
|
|
} else if strings.HasSuffix(strings.ToLower(str), "microsecond") {
|
|
} else if strings.HasSuffix(strings.ToLower(str), "microsecond") {
|
|
numStr := str[:len(str)-11]
|
|
numStr := str[:len(str)-11]
|
|
- num, _ := strconv.ParseInt(numStr, 10, 64)
|
|
|
|
|
|
+ num, _ := ParserInt(numStr, 10, 64)
|
|
return time.Microsecond * time.Duration(num)
|
|
return time.Microsecond * time.Duration(num)
|
|
}
|
|
}
|
|
|
|
|
|
if strings.HasSuffix(strings.ToUpper(str), "NS") {
|
|
if strings.HasSuffix(strings.ToUpper(str), "NS") {
|
|
numStr := str[:len(str)-2]
|
|
numStr := str[:len(str)-2]
|
|
- num, _ := strconv.ParseInt(numStr, 10, 64)
|
|
|
|
|
|
+ num, _ := ParserInt(numStr, 10, 64)
|
|
return time.Nanosecond * time.Duration(num)
|
|
return time.Nanosecond * time.Duration(num)
|
|
} else if strings.HasSuffix(strings.ToLower(str), "nanosecond") {
|
|
} else if strings.HasSuffix(strings.ToLower(str), "nanosecond") {
|
|
numStr := str[:len(str)-10]
|
|
numStr := str[:len(str)-10]
|
|
- num, _ := strconv.ParseInt(numStr, 10, 64)
|
|
|
|
|
|
+ num, _ := ParserInt(numStr, 10, 64)
|
|
return time.Nanosecond * time.Duration(num)
|
|
return time.Nanosecond * time.Duration(num)
|
|
}
|
|
}
|
|
|
|
|
|
- num, _ := strconv.ParseInt(str, 10, 64)
|
|
|
|
|
|
+ num, _ := ParserInt(str, 10, 64)
|
|
return time.Duration(num) * time.Second
|
|
return time.Duration(num) * time.Second
|
|
}
|
|
}
|
|
|
|
|
|
@@ -137,15 +132,15 @@ func TimeDurationToStringCN(t time.Duration) string {
|
|
const day = 24 * time.Hour
|
|
const day = 24 * time.Hour
|
|
const year = 365 * day
|
|
const year = 365 * day
|
|
|
|
|
|
- if t > year {
|
|
|
|
|
|
+ if t >= year {
|
|
return fmt.Sprintf("%d年", t/year)
|
|
return fmt.Sprintf("%d年", t/year)
|
|
- } else if t > day {
|
|
|
|
|
|
+ } else if t >= day {
|
|
return fmt.Sprintf("%d天", t/day)
|
|
return fmt.Sprintf("%d天", t/day)
|
|
- } else if t > time.Hour {
|
|
|
|
|
|
+ } else if t >= time.Hour {
|
|
return fmt.Sprintf("%d小时", t/time.Hour)
|
|
return fmt.Sprintf("%d小时", t/time.Hour)
|
|
- } else if t > time.Minute {
|
|
|
|
|
|
+ } else if t >= time.Minute {
|
|
return fmt.Sprintf("%d分钟", t/time.Minute)
|
|
return fmt.Sprintf("%d分钟", t/time.Minute)
|
|
- } else if t > time.Second {
|
|
|
|
|
|
+ } else if t >= time.Second {
|
|
return fmt.Sprintf("%d秒", t/time.Second)
|
|
return fmt.Sprintf("%d秒", t/time.Second)
|
|
}
|
|
}
|
|
|
|
|
|
@@ -156,15 +151,15 @@ func TimeDurationToString(t time.Duration) string {
|
|
const day = 24 * time.Hour
|
|
const day = 24 * time.Hour
|
|
const year = 365 * day
|
|
const year = 365 * day
|
|
|
|
|
|
- if t > year {
|
|
|
|
- return fmt.Sprintf("%dY", t/year)
|
|
|
|
- } else if t > day {
|
|
|
|
- return fmt.Sprintf("%dD", t/day)
|
|
|
|
- } else if t > time.Hour {
|
|
|
|
|
|
+ if t >= year {
|
|
|
|
+ return fmt.Sprintf("%dy", t/year)
|
|
|
|
+ } else if t >= day {
|
|
|
|
+ return fmt.Sprintf("%dd", t/day)
|
|
|
|
+ } else if t >= time.Hour {
|
|
return fmt.Sprintf("%dh", t/time.Hour)
|
|
return fmt.Sprintf("%dh", t/time.Hour)
|
|
- } else if t > time.Minute {
|
|
|
|
|
|
+ } else if t >= time.Minute {
|
|
return fmt.Sprintf("%dmin", t/time.Minute)
|
|
return fmt.Sprintf("%dmin", t/time.Minute)
|
|
- } else if t > time.Second {
|
|
|
|
|
|
+ } else if t >= time.Second {
|
|
return fmt.Sprintf("%ds", t/time.Second)
|
|
return fmt.Sprintf("%ds", t/time.Second)
|
|
}
|
|
}
|
|
|
|
|