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

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

来自 Wikipedia on ISO 8601 durations

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

stack overflow Parse ISO 8601 time duration using Go (for instance PT90M)
原文答案
author avatar

接受的答案

标准库中没有 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