【问题标题】:Parse ISO 8601 time duration using Go (for instance PT90M)使用 Go 解析 ISO 8601 持续时间(例如 PT90M)
【发布时间】:2021-02-16 14:39:25
【问题描述】:

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

来自Wikipedia on ISO 8601 durations

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

【问题讨论】:

  • 解析日期/时间字符串在 Go 中有很好的记录。你试过什么?你遇到了什么问题?
  • 这个问题特别是关于标准库不支持的 ISO 8601 持续时间。
  • KeyB0rys,这里是一个示例 play.golang.org/p/guybDGoJVrT 与 3rd 方库。

标签: go duration iso8601


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2014-07-16
    • 2014-08-16
    • 1970-01-01
    • 2021-10-07
    • 1970-01-01
    • 2010-11-11
    • 2016-11-30
    • 2021-05-21
    • 2021-12-12
    相关资源
    最近更新 更多