猿问

使用 Go 解析 ISO 8601 持续时间(例如 PT90M)

有什么简单的方法可以将 ISO 8601 字符串持续时间(P(n)Y(n)M(n)DT(n)H(n)M(n)S)转换为time.Duration

来自维基百科,免费的百科全书

例如,“P3Y6M4DT12H30M5S”表示“三年六个月四天十二小时三十分钟五秒”的持续时间。


慕森王
浏览 349回答 2
2回答

PIPIONE

标准库中没有 API,但是有一个 3rd 方库可以将 ISO 8601 持续时间添加到time.Time:https ://godoc.org/github.com/senseyeio/duration#Duration.Shift 。ISO 8601 持续时间一般不能转换为 a time.Duration,因为它取决于基数time.Time。https://play.golang.org/p/guybDGoJVrTpackage mainimport (    "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}

Cats萌萌

发现现有的解决方案不太令人满意,我创建了自己的模块来解析 ISO 8601 持续时间并将它们直接转换为time.Duration. 希望对你有帮助。:)示例用法:https ://go.dev/play/p/Nz5akjy1c6W
随时随地看视频慕课网APP

相关分类

Go
我要回答