Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions time/time.go
Original file line number Diff line number Diff line change
Expand Up @@ -192,6 +192,7 @@ func ParseDuration(from string) (int, int, int, time.Duration, int, error) {
// - ISO8601 duration format
// - time.Duration string format
// - RFC3339 datetime format
// - RFC3339nano datetime format
// For duration formats, an offset is added.
func ParseTime(from string, offset *time.Time) (time.Time, error) {
var start time.Time
Expand All @@ -210,8 +211,12 @@ func ParseTime(from string, offset *time.Time) (time.Time, error) {
if dur, err = time.ParseDuration(from); err == nil {
return start.Add(dur), nil
}
if t, err := time.Parse(time.RFC3339Nano, from); err == nil {
return t, nil
}
if t, err := time.Parse(time.RFC3339, from); err == nil {
return t, nil
}

return time.Time{}, errors.New("unsupported time/duration format: " + from)
}
7 changes: 7 additions & 0 deletions time/time_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -212,6 +212,13 @@ func TestParseTime(t *testing.T) {
require.NoError(t, err)
assert.Equal(t, time.Duration(0), expected.Sub(tm))
})
t.Run("parse RFC3339nano datetime", func(t *testing.T) {
dummy := time.Now().Add(1000 * time.Nanosecond)
expected := time.Now().Add(100 * time.Nanosecond)
tm, err := ParseTime(expected.Format(time.RFC3339Nano), &dummy)
require.NoError(t, err)
assert.Equal(t, time.Duration(0), expected.Sub(tm))
})
t.Run("parse empty string", func(t *testing.T) {
_, err := ParseTime("", nil)
require.ErrorContains(t, err, "unsupported time/duration format")
Expand Down
Loading