有什么简单的方法可以将 ISO 8601 字符串持续时间 ( P(n)Y(n)M(n)DT(n)H(n)M(n)S
) 转换为 time.Duration
?
来自 Wikipedia on ISO 8601 durations :
例如,“P3Y6M4DT12H30M5S”表示“三年六个月四天十二小时三十分钟五秒”的持续时间。
有什么简单的方法可以将 ISO 8601 字符串持续时间 ( P(n)Y(n)M(n)DT(n)H(n)M(n)S
) 转换为 time.Duration
?
来自 Wikipedia on ISO 8601 durations :
例如,“P3Y6M4DT12H30M5S”表示“三年六个月四天十二小时三十分钟五秒”的持续时间。
标准库中没有 API,但是有一个第三方库可以将 ISO 8601 持续时间添加到 time.Time
: https://godoc.org/github.com/senseyeio/duration#Duration.Shift 。
ISO 8601 持续时间通常不能转换为 time.Duration
,因为它依赖于基础 time.Time
。
https://play.golang.org/p/guybDGoJVrT
package main
import (
"fmt"
"time"
"github.com/senseyeio/duration"
)
func main() {
d, _ := duration.ParseISO8601("P1D")
today := time.Now()
tomorrow := d.Shift(today)
fmt.Println(today.Format("Jan _2")) // Nov 11
fmt.Println(tomorrow.Format("Jan _2")) // Nov 12
}
找到现有的解决方案少于我创建的 my own module 来解析ISO 8601持续时间,然后将它们直接转换为
time.Duration
。希望对你有帮助。:)示例用法: https://go.dev/play/p/Nz5akjy1c6W