https://github.com/natescarlet/iso8601
Process iso8601 duration without using regex.
https://github.com/natescarlet/iso8601
duration iso8601
Last synced: 6 months ago
JSON representation
Process iso8601 duration without using regex.
- Host: GitHub
- URL: https://github.com/natescarlet/iso8601
- Owner: NateScarlet
- License: mit
- Created: 2020-05-15T12:33:35.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2025-01-21T14:04:46.000Z (9 months ago)
- Last Synced: 2025-04-05T00:02:23.358Z (6 months ago)
- Topics: duration, iso8601
- Language: Go
- Size: 43 KB
- Stars: 0
- Watchers: 1
- Forks: 1
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# iso8601
[](https://pkg.go.dev/github.com/NateScarlet/iso8601/pkg/iso8601)
[](https://github.com/NateScarlet/iso8601/actions)Process iso8601 duration without using regex.
- Support duration range from `P9223372036854775807Y9223372036854775807M9223372036854775807W9223372036854775807DT9223372036854775807H9223372036854775807M9223372036854775807.999999999S` to `P-9223372036854775808Y-9223372036854775808M-9223372036854775808W-9223372036854775808DT-9223372036854775808H-9223372036854775808M-9223372036854775808.999999999S`
## Usage
```shell
go get github.com/NateScarlet/iso8601
``````go
import (
"time""github.com/NateScarlet/iso8601/pkg/iso8601"
)iso8601.ParseDuration("P1D")
// iso8601.Duration{Days: 1}, niliso8601.ParseDuration("P-1D")
// iso8601.Duration{Days: -1}, niliso8601.ParseDuration("-P1D")
// iso8601.Duration{Days: 1, Negative: true}, niliso8601.ParseDuration("P0.5D")
// iso8601.Duration{Hours: 12}, niliso8601.ParseDuration("P0.5DT0.5H")
// nil, iso8601.ErrInvalidDurationiso8601.ParseDuration("P.D")
// nil, iso8601.ErrInvalidDurationiso8601.Duration{}.String()
// "P0D"iso8601.Duration{Days: 1}.String()
// "P1D"iso8601.Duration{Days: -1}.String()
// "P-1D"iso8601.Duration{Days: 1, Negative: true}.String()
// "-P1D"iso8601.NewDuration(int64(time.Hour))
// *iso8601.Duration{Hours: 1}iso8601.NewDuration(-int64(time.Hour))
// *iso8601.Duration{Hours: 1, Negative: true}iso8601.Duration{Hours: 24}.TimeDuration()
// 24 * time.Hour, niliso8601.Duration{Years: 293}.TimeDuration()
// nil, iso8601.ErrOverflowiso8601.Duration{Hours: 24}.MustTimeDuration()
// 24 * time.Houriso8601.Duration{Years: 293}.MustTimeDuration()
// panic(iso8601.ErrOverflow)
```## Benchmark
Athlon 64 X2 Dual core 5600+ 2.9Ghz
```text
goos: windows
goarch: amd64
pkg: github.com/NateScarlet/iso8601/pkg/iso8601
BenchmarkDurationStringLen22-2 4095756 356 ns/op 0 B/op 0 allocs/op
BenchmarkDurationStringLen160-2 1000000 1288 ns/op 160 B/op 1 allocs/op
BenchmarkParseDuration-2 3669727 405 ns/op 0 B/op 0 allocs/op
BenchmarkNewDuration-2 1000000000 1.29 ns/op 0 B/op 0 allocs/op
BenchmarkDurationTimeDuration-2 1887405 602 ns/op 0 B/op 0 allocs/op
BenchmarkParseTime-2 1406799 832 ns/op 0 B/op 0 allocs/op
BenchmarkFormatTime-2 1442318 782 ns/op 0 B/op 0 allocs/op
```