golang时间间隔格式化插件库durafmt的使用
Golang时间间隔格式化插件库durafmt的使用
durafmt是一个小型Go库,用于将time.Duration
字符串(和类型)格式化为人类可读的格式。
安装
go get github.com/hako/durafmt
为什么需要durafmt
如果你在Go中使用过time.Duration
,可能会遇到这样的输出:
53m28.587093086s // :)
上面的输出看起来很容易阅读,但如果你的持续时间是这样的:
354h22m3.24s // :S
这种情况下,durafmt就能派上用场了。
使用示例
durafmt.ParseString()
package main
import (
"fmt"
"github.com/hako/durafmt"
)
func main() {
duration, err := durafmt.ParseString("354h22m3.24s")
if err != nil {
fmt.Println(err)
}
fmt.Println(duration) // 2 weeks 18 hours 22 minutes 3 seconds
// duration.String() // String representation. "2 weeks 18 hours 22 minutes 3 seconds"
}
durafmt.ParseStringShort()
durafmt.ParseStringShort()
是durafmt.ParseString()
的简化版本,只返回持续时间字符串的第一部分。
package main
import (
"fmt"
"github.com/hako/durafmt"
)
func main() {
duration, err := durafmt.ParseStringShort("354h22m3.24s")
if err != nil {
fmt.Println(err)
}
fmt.Println(duration) // 2 weeks
// duration.String() // String short representation. "2 weeks"
}
durafmt.Parse()
package main
import (
"fmt"
"time"
"github.com/hako/durafmt"
)
func main() {
timeduration := (354 * time.Hour) + (22 * time.Minute) + (3 * time.Second)
duration := durafmt.Parse(timeduration).String()
fmt.Println(duration) // 2 weeks 18 hours 22 minutes 3 seconds
}
LimitFirstN()
类似于durafmt.ParseStringShort()
,但可以限制返回持续时间字符串的前N部分。
package main
import (
"fmt"
"time"
"github.com/hako/durafmt"
)
func main() {
timeduration := (354 * time.Hour) + (22 * time.Minute) + (3 * time.Second)
duration := durafmt.Parse(timeduration).LimitFirstN(2) // limit first two parts.
fmt.Println(duration) // 2 weeks 18 hours
}
自定义单位
使用durafmt.Units{}
和durafmt.Durafmt.Format(units)
可以用自定义单位字符串化持续时间。
package main
import (
"fmt"
"time"
"github.com/hako/durafmt"
)
func main() {
timeduration := (354 * time.Hour) + (22 * time.Minute) + (1 * time.Second) + (100*time.Microsecond)
duration := durafmt.Parse(timeduration)
// 使用葡萄牙语单位
units, err := durafmt.DefaultUnitsCoder.Decode("ano,semana,dia,hora,minuto,segundo,milissegundo,microssegundo")
if err != nil {
panic(err)
}
fmt.Println(duration.Format(units)) // 2 semanas 18 horas 22 minutos 1 segundo 100 microssegundos
// 自定义复数形式(singular:plural)
units, err = durafmt.DefaultUnitsCoder.Decode("ano,semana:SEMANAS,dia,hora,minuto,segundo,milissegundo,microssegundo")
if err != nil {
panic(err)
}
fmt.Println(duration.Format(units)) // 2 SEMANAS 18 horas 22 minutos 1 segundo 100 microssegundos
}
贡献
欢迎贡献!Fork这个仓库,添加你的更改并提交PR。
如果你想修复bug、添加功能或提供反馈,可以在issues部分进行。
durafmt使用golangci-lint
进行测试,你可以使用go test
运行测试。
在贡献时,建议运行go test; go vet; golint
或golangci-lint
。
许可证
MIT
更多关于golang时间间隔格式化插件库durafmt的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于golang时间间隔格式化插件库durafmt的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
durafmt - Golang时间间隔格式化库
durafmt 是一个用于格式化时间间隔(time.Duration)为人类可读格式的Golang库。它可以将标准库中的time.Duration转换为更友好的字符串表示,例如"3小时5分钟"而不是"3h5m"。
安装
使用go get安装durafmt:
go get github.com/hako/durafmt
基本用法
简单示例
package main
import (
"fmt"
"time"
"github.com/hako/durafmt"
)
func main() {
duration := time.Hour*24*3 + time.Hour*5 + time.Minute*30 + time.Second*45
// 基本格式化
str := durafmt.Parse(duration).String()
fmt.Println(str) // 输出: 3天5小时30分钟45秒
// 限制显示单位数量
limited := durafmt.Parse(duration).LimitFirstN(2)
fmt.Println(limited) // 输出: 3天5小时
}
更多用法示例
package main
import (
"fmt"
"time"
"github.com/hako/durafmt"
)
func main() {
// 示例1: 简单格式化
duration1 := 2*time.Hour + 30*time.Minute
fmt.Println(durafmt.Parse(duration1).String()) // 2小时30分钟
// 示例2: 复数形式处理
duration2 := 1*time.Hour + 1*time.Minute + 1*time.Second
fmt.Println(durafmt.Parse(duration2).String()) // 1小时1分钟1秒
// 示例3: 毫秒和微秒
duration3 := 1500 * time.Millisecond
fmt.Println(durafmt.Parse(duration3).String()) // 1秒500毫秒
// 示例4: 限制显示单位数量
duration4 := 5*time.Hour + 30*time.Minute + 45*time.Second + 500*time.Millisecond
fmt.Println(durafmt.Parse(duration4).LimitFirstN(2).String()) // 5小时30分钟
// 示例5: 国际化(英文)
durafmt.English()
duration5 := 2*time.Hour + 45*time.Minute
fmt.Println(durafmt.Parse(duration5).String()) // 2 hours 45 minutes
}
高级功能
自定义单位名称
package main
import (
"fmt"
"time"
"github.com/hako/durafmt"
)
func main() {
duration := 3*time.Hour + 15*time.Minute
// 自定义单位名称
customUnits := durafmt.Units{
Year: "年",
Month: "月",
Week: "周",
Day: "天",
Hour: "小时",
Minute: "分钟",
Second: "秒",
}
str := durafmt.Parse(duration).Format(customUnits)
fmt.Println(str) // 3小时15分钟
}
忽略某些单位
package main
import (
"fmt"
"time"
"github.com/hako/durafmt"
)
func main() {
duration := 3*time.Hour + 15*time.Minute + 30*time.Second
// 忽略秒
str := durafmt.Parse(duration).IgnoreSeconds().String()
fmt.Println(str) // 3小时15分钟
// 忽略分钟和秒
str = durafmt.Parse(duration).IgnoreMinutes().IgnoreSeconds().String()
fmt.Println(str) // 3小时
}
性能考虑
durafmt 在设计时考虑了性能,它比简单的字符串拼接或正则表达式替换更高效。对于大多数应用场景,它的性能开销可以忽略不计。
使用场景
durafmt 特别适合以下场景:
- 显示任务执行时间
- 显示缓存过期时间
- 显示用户等待时间
- 任何需要向用户展示时间间隔的地方
总结
durafmt 是一个简单但强大的库,可以轻松地将Go的time.Duration转换为人类可读的格式。它支持自定义单位名称、限制显示单位数量、忽略特定单位等功能,非常适合需要友好时间显示的应用。
更多详细信息和高级用法,可以参考项目的GitHub页面:https://github.com/hako/durafmt