英文:
Time duration to string 2h instead 2h0m0s
问题
默认的time.Duration String方法会在分钟后添加0s
,在小时后添加0m0s
来格式化持续时间。是否有可以使用的函数,可以生成5m
而不是5m0s
,以及2h
而不是2h0m0s
...或者我必须自己实现这个功能?
英文:
The default time.Duration String method formats the duration with adding 0s
for minutes and 0m0s
for hours. Is there function that I can use that will produce 5m
instead 5m0s
and 2h
instead 2h0m0s
... or I have to implement my own?
答案1
得分: 13
前言: 我在github.com/icza/gox
发布了这个实用程序,请参阅timex.ShortDuration()
。
虽然标准库中没有,但创建一个很容易:
func shortDur(d time.Duration) string {
s := d.String()
if strings.HasSuffix(s, "m0s") {
s = s[:len(s)-2]
}
if strings.HasSuffix(s, "h0m") {
s = s[:len(s)-2]
}
return s
}
进行测试:
h, m, s := 5*time.Hour, 4*time.Minute, 3*time.Second
ds := []time.Duration{
h + m + s, h + m, h + s, m + s, h, m, s,
}
for _, d := range ds {
fmt.Printf("%-8v %v\n", d, shortDur(d))
}
输出结果(在Go Playground上尝试):
5h4m3s 5h4m3s
5h4m0s 5h4m
5h0m3s 5h0m3s
4m3s 4m3s
5h0m0s 5h
4m0s 4m
3s 3s
英文:
Foreword: I released this utility in github.com/icza/gox
, see timex.ShortDuration()
.
Not in the standard library, but it's really easy to create one:
func shortDur(d time.Duration) string {
s := d.String()
if strings.HasSuffix(s, "m0s") {
s = s[:len(s)-2]
}
if strings.HasSuffix(s, "h0m") {
s = s[:len(s)-2]
}
return s
}
Testing it:
h, m, s := 5*time.Hour, 4*time.Minute, 3*time.Second
ds := []time.Duration{
h + m + s, h + m, h + s, m + s, h, m, s,
}
for _, d := range ds {
fmt.Printf("%-8v %v\n", d, shortDur(d))
}
Output (try it on the Go Playground):
5h4m3s 5h4m3s
5h4m0s 5h4m
5h0m3s 5h0m3s
4m3s 4m3s
5h0m0s 5h
4m0s 4m
3s 3s
答案2
得分: 2
你可以像这样对持续时间进行四舍五入:
func RountTime(roundTo string, value time.Time) string {
since := time.Since(value)
if roundTo == "h" {
since -= since % time.Hour
}
if roundTo == "m" {
since -= since % time.Minute
}
if roundTo == "s" {
since -= since % time.Second
}
return since.String()
}
这段代码会根据指定的精度对时间进行四舍五入,并返回结果。
英文:
You can just round the duration like this:
func RountTime(roundTo string, value time.Time) string {
since := time.Since(value)
if roundTo == "h" {
since -= since % time.Hour
}
if roundTo == "m" {
since -= since % time.Minute
}
if roundTo == "s" {
since -= since % time.Second
}
return since.String()
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论