sosodev/duration

GitHub: sosodev/duration

一个 Go 语言编写的 ISO 8601 duration 解析库,可将标准持续时间字符串解析为结构化字段并转换为 Go 原生的 time.Duration 类型。

Stars: 39 | Forks: 15

# duration [![Go 参考](https://pkg.go.dev/badge/github.com/sosodev/duration.svg)](https://pkg.go.dev/github.com/sosodev/duration) 这是一个用于解析 [ISO 8601 durations](https://en.wikipedia.org/wiki/ISO_8601#Durations) 并将其转换为通常更实用的 `time.Duration` 的 Go module。 ## 为什么? ISO 8601 是一个非常常见的标准,有时这些 duration 会在实际应用中出现。 ## 安装 `go get github.com/sosodev/duration` ## [用法](https://go.dev/play/p/Nz5akjy1c6W) ``` package main import ( "fmt" "time" "github.com/sosodev/duration" ) func main() { d, err := duration.Parse("P3Y6M4DT12H30M5.5S") if err != nil { panic(err) } fmt.Println(d.Years) // 3 fmt.Println(d.Months) // 6 fmt.Println(d.Days) // 4 fmt.Println(d.Hours) // 12 fmt.Println(d.Minutes) // 30 fmt.Println(d.Seconds) // 5.5 d, err = duration.Parse("PT33.3S") if err != nil { panic(err) } fmt.Println(d.ToTimeDuration() == time.Second*33+time.Millisecond*300) // true } ``` ## 正确性 本 module 旨在正确实现 ISO 8601 duration 规范。它正确支持小数单位,并带有单元测试,以断言其解析和转换为 `time.Duration` 的正确性。 话虽如此,指定了月份或年份的 duration 在转换为 `time.Duration` 时会有一点模糊。因为我找不到一个标准值,而且它们显然是可变的,所以我对于月份使用了 `2.628e+15` 纳秒,对于年份使用了 `3.154e+16` 纳秒。
标签:EVTX分析, Go, ISO 8601, Ruby工具, 开发库, 数据解析, 日志审计, 时间处理