Parse ISO 8601 time duration using Go (for instance PT90M)

Key*_*rys 5 duration iso8601 go

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

来自维基百科关于 ISO 8601 的持续时间

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

vea*_*top 5

标准库中没有 API,但有一个 3rd 方库可以将 ISO 8601 持续时间添加到 a time.Timehttps : //godoc.org/github.com/senseyeio/duration#Duration.Shift

ISO 8601 持续时间通常不能转换为 a,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
}
Run Code Online (Sandbox Code Playgroud)