为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕森王 2022-07-11 16:01:08
有什么简单的方法可以将 ISO 8601 字符串持续时间(P(n)Y(n)M(n)DT(n)H(n)M(n)S)转换为time.Duration?来自维基百科,免费的百科全书例如,“P3Y6M4DT12H30M5S”表示“三年六个月四天十二小时三十分钟五秒”的持续时间。
查看完整描述

2 回答

?
PIPIONE

TA贡献1829条经验 获得超9个赞

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

}


查看完整回答
反对 回复 2022-07-11
?
Cats萌萌

TA贡献1805条经验 获得超9个赞

发现现有的解决方案不太令人满意,我创建了自己的模块来解析 ISO 8601 持续时间并将它们直接转换为time.Duration. 希望对你有帮助。:)

示例用法:https ://go.dev/play/p/Nz5akjy1c6W


查看完整回答
反对 回复 2022-07-11
  • 2 回答
  • 0 关注
  • 347 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号