diff options
author | 2021-10-24 13:14:37 +0200 | |
---|---|---|
committer | 2021-10-24 13:14:37 +0200 | |
commit | 8b7c3507fe0c8f6e921ee2de2c170ef93eeb7275 (patch) | |
tree | e79e3f5a59fb8942de79955bd26bf665be0acce8 /vendor/github.com/uptrace/bun/internal/time.go | |
parent | docs typo fix (#290) (diff) | |
download | gotosocial-8b7c3507fe0c8f6e921ee2de2c170ef93eeb7275.tar.xz |
upstep bun to v1.0.14 (#291)
Diffstat (limited to 'vendor/github.com/uptrace/bun/internal/time.go')
-rw-r--r-- | vendor/github.com/uptrace/bun/internal/time.go | 54 |
1 files changed, 37 insertions, 17 deletions
diff --git a/vendor/github.com/uptrace/bun/internal/time.go b/vendor/github.com/uptrace/bun/internal/time.go index e4e0804b0..2cb69b46a 100644 --- a/vendor/github.com/uptrace/bun/internal/time.go +++ b/vendor/github.com/uptrace/bun/internal/time.go @@ -8,34 +8,54 @@ import ( const ( dateFormat = "2006-01-02" timeFormat = "15:04:05.999999999" + timetzFormat1 = "15:04:05.999999999-07:00:00" + timetzFormat2 = "15:04:05.999999999-07:00" + timetzFormat3 = "15:04:05.999999999-07" timestampFormat = "2006-01-02 15:04:05.999999999" - timestamptzFormat = "2006-01-02 15:04:05.999999999-07:00:00" + timestamptzFormat1 = "2006-01-02 15:04:05.999999999-07:00:00" timestamptzFormat2 = "2006-01-02 15:04:05.999999999-07:00" timestamptzFormat3 = "2006-01-02 15:04:05.999999999-07" ) func ParseTime(s string) (time.Time, error) { - switch l := len(s); { - case l < len("15:04:05"): - return time.Time{}, fmt.Errorf("bun: can't parse time=%q", s) - case l <= len(timeFormat): - if s[2] == ':' { - return time.ParseInLocation(timeFormat, s, time.UTC) - } - return time.ParseInLocation(dateFormat, s, time.UTC) - default: - if s[10] == 'T' { + l := len(s) + + if l >= len("2006-01-02 15:04:05") { + switch s[10] { + case ' ': + if c := s[l-6]; c == '+' || c == '-' { + return time.Parse(timestamptzFormat2, s) + } + if c := s[l-3]; c == '+' || c == '-' { + return time.Parse(timestamptzFormat3, s) + } + if c := s[l-9]; c == '+' || c == '-' { + return time.Parse(timestamptzFormat1, s) + } + return time.ParseInLocation(timestampFormat, s, time.UTC) + case 'T': return time.Parse(time.RFC3339Nano, s) } - if c := s[l-9]; c == '+' || c == '-' { - return time.Parse(timestamptzFormat, s) - } + } + + if l >= len("15:04:05-07") { if c := s[l-6]; c == '+' || c == '-' { - return time.Parse(timestamptzFormat2, s) + return time.Parse(timetzFormat2, s) } if c := s[l-3]; c == '+' || c == '-' { - return time.Parse(timestamptzFormat3, s) + return time.Parse(timetzFormat3, s) } - return time.ParseInLocation(timestampFormat, s, time.UTC) + if c := s[l-9]; c == '+' || c == '-' { + return time.Parse(timetzFormat1, s) + } + } + + if l < len("15:04:05") { + return time.Time{}, fmt.Errorf("bun: can't parse time=%q", s) + } + + if s[2] == ':' { + return time.ParseInLocation(timeFormat, s, time.UTC) } + return time.ParseInLocation(dateFormat, s, time.UTC) } |